Skip to content
9 changes: 6 additions & 3 deletions tests/coal-pike/create.pike
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#define OBJ(o) _Server->get_module("filepath:tree")->path_to_object(o)

// Generalized test case to create various types of objects
int generalCreate(object me,object _Server,object...args)
{
object code = ((program)"create_object.pike")();
object code = ((program)"create_object.pike")(); //importing the file containing the generalized case
array(function) foo = values(code);
int success = 1;
array(string) testClass = ({"Container","Document","Room","Exit","User","Group"});
Expand All @@ -16,6 +17,7 @@ int generalCreate(object me,object _Server,object...args)
return success;
}

//Creating object of a class that does not exists
int invalidClass(object me,object _Server,object...args)
{
int pass=0;
Expand All @@ -25,7 +27,8 @@ int invalidClass(object me,object _Server,object...args)

return pass;
}

/*
//Creating user
int createUser(object me,object _Server,object...args)
{
int pass = 0;
Expand All @@ -41,4 +44,4 @@ int createUser(object me,object _Server,object...args)

return pass;
}

*/
5 changes: 2 additions & 3 deletions tests/coal-pike/create_object.pike
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
#define OBJ(o) _Server->get_module("filepath:tree")->path_to_object(o)

//generalized test case for creating objects
int testcase(object me,object _Server,string type)
{
int pass = 0;
object room = OBJ("/TestRoom");
object room = OBJ("/home/TestUser/TestRoom");
mixed result =catch{ _Server->get_factory(type)->execute((["name":"TestObj"+type]))->move(room); };
if(result ==0)pass=1;
else if((type=="User")&& result!=0)pass=1;
object ref = OBJ("/TestRoom/TestObj"+type);
if(ref!=0)ref->delete();
return pass;

}
5 changes: 3 additions & 2 deletions tests/coal-pike/getEnv.pike
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
#define OBJ(o) _Server->get_module("filepath:tree")->path_to_object(o)

// Tests the function getEnvironment
int callingFunction(object me,object _Server,object...args)
{
object parent = OBJ("/TestRoom");
object parent = OBJ("/home/TestUser/TestRoom");
_Server->get_factory("Room")->execute((["name":"getEnv"]))->move(parent);
object obj = OBJ("/TestRoom/getEnv");
object obj = OBJ("/home/TestUser/TestRoom/getEnv");
int pass = 0;
write("Calling get_environment: ");
if(parent==obj->get_environment()) pass=1;
Expand Down
58 changes: 19 additions & 39 deletions tests/coal-pike/move.pike
Original file line number Diff line number Diff line change
@@ -1,48 +1,33 @@
#define OBJ(o) _Server->get_module("filepath:tree")->path_to_object(o)

//Move the current user to a room
int testcase1(object me,object _Server,object...args)
{
int pass = 0;
_Server->get_factory("Room")->execute((["name":"TestsubRoom"]))->move(OBJ("/TestRoom"));
object obj = OBJ("/TestRoom/TestsubRoom");
_Server->get_factory("Room")->execute((["name":"TestsubRoom"]))->move(OBJ("/home/TestUser/TestRoom"));
object obj = OBJ("/home/TestUser/TestRoom/TestsubRoom");
mixed result = catch{me->move(obj);};
write("Moving user: ");
if(result == 0)pass=1;
if(pass==1)write("passed\n");
else write("failed\n");
me->move(OBJ("/TestRoom"));
me->move(OBJ("/home/TestUser/TestRoom"));
if(obj!=0)obj->delete();
return pass;
}
/*
int testcase2(object me,object _Server)
{
int pass = 0;
mixed result = catch{me->move(OBJ("nopath"));};
write("Moving to a non existential location nopath.: ");
if(result !=0)pass=1;
if(pass==1)write("passed\n");
else write("failed\n");
me->move(OBJ("/TestRoom"));
return pass;
}
*/

// Generalized test case to move objects to non exestential location
//Currently test Room and User.
int testcase2(object me,object _Server,object...args)
{
int pass = 1;
object code = ((program)"move_nonexistential.pike")();
object code = ((program)"move_nonexistential.pike")(); //imports the file containing the generalized test case
array(function) foo = values(code);
_Server->get_factory("Room")->execute((["name":"move2Room"]))->move(OBJ("/TestRoom"));
_Server->get_factory("User")->execute((["name":"move2User","pw":"testpass","email":"abc@example.com"]));
_Server->get_module("users")->get_user("move2User")->activate_user();
_Server->get_factory("Room")->execute((["name":"move2Room"]))->move(OBJ("/home/TestUser/TestRoom")); //Test Room to move
args[1]("move2User","testpass");
array(object) testObjects = allocate(2);
do{
testObjects[0]=OBJ("/TestRoom/move2Room");
}while(testObjects[0]==0);
do{
testObjects[0]=OBJ("/home/TestUser/TestRoom/move2Room");
testObjects[1]=_Server->get_module("users")->get_user("move2User");
}while(testObjects[1]==0);
int success = 1;
for(int i = 0;i<sizeof(testObjects);i++){
write("Moving "+testObjects[i]->get_class()+ " to a non existential path: ");
Expand All @@ -53,41 +38,36 @@ int testcase2(object me,object _Server,object...args)
}

if(success==0)pass=0;
if(testObjects[1]!=0)
testObjects[1]->delete();
return pass;
return pass;
}

//Moving user into a container
int testcase3(object me,object _Server,object...args)
{
int pass = 0;
mixed result = 0;
int res =_Server->get_factory("Container")->execute((["name":"Testmove3"]))->move(OBJ("/TestRoom"));
object obj = OBJ("/TestRoom/Testmove3");
int res =_Server->get_factory("Container")->execute((["name":"Testmove3"]))->move(OBJ("/home/TestUser/TestRoom"));
object obj = OBJ("/home/TestUser/TestRoom/Testmove3");
result = catch{me->move(obj);};
write("Moving user into a container: ");
if(result != 0)pass=1;
if(pass==1)write("passed\n");
else write("failed\n");
if(obj!=0)obj->delete();
return pass;
}

//Moving a room inside a container
int testcase4(object me,object _Server,object...args)
{
int pass = 0;
_Server->get_factory("Room")->execute((["name":"Testmove4"]))->move(OBJ("/TestRoom"));
_Server->get_factory("Container")->execute((["name":"Testcontmove4"]))->move(OBJ("/TestRoom"));
object room = OBJ("/TestRoom/Testmove4");
object container = OBJ("/TestRoom/Testcontmove4");
_Server->get_factory("Room")->execute((["name":"Testmove4"]))->move(OBJ("/home/TestUser/TestRoom"));
_Server->get_factory("Container")->execute((["name":"Testcontmove4"]))->move(OBJ("/home/TestUser/TestRoom"));
object room = OBJ("/home/TestUser/TestRoom/Testmove4");
object container = OBJ("/home/TestUser/TestRoom/Testcontmove4");
mixed result = catch{room->move(container);};
write("Moving room inside container: ");
if(result!=0)pass=1;
if(pass==1)write("passed\n");
else write("failed\n");
if(room!=0)
room->delete();
if(container!=0)
container->delete();
return pass;
}
1 change: 1 addition & 0 deletions tests/coal-pike/move_nonexistential.pike
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#define OBJ(o) _Server->get_module("filepath:tree")->path_to_object(o)

// Generalized test case to move an object to a non exestential location
int testcase(object me,object _Server,object x)
{
int pass = 0;
Expand Down
80 changes: 57 additions & 23 deletions tests/coal-pike/test.pike
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,36 @@ class Testcase{
}

class Test{
string name;
string name; //Name of the the test case set

//variables used to establish connection and interact with the server
object _Server;
object me;
object conn;
array(Testcase) cases;
int failures;
void create(string name,int totalCases){
object _ServerRoot;
object connRoot;

//array(Testcase) cases;
int cases;
int failures;

//Initialize the test case name and the number of test cases and call the init method
void create(string name,int totalCases){
this.name=name;
cases = allocate(totalCases);
cases = totalCases;
init();
}
void destroy(){
me->move(OBJ("/home/steam"));
object obj = OBJ("/TestRoom");
if(obj!=0)
obj->delete();
write("===============================\n");

//Delete the objects created by the test suite and exit
void clear(){
object user = _ServerRoot->get_module("users")->get_user("TestUser");
if(user)user->delete();
conn->logout();
connRoot->logout();
// write("===============================\n");
}

//Establist a connection to the server and initialize the server variables
void init(){
string host = "127.0.0.1";
int port = 1900;
Expand All @@ -38,40 +50,62 @@ class Test{
master()->add_program_path(server_path+"/server/net/coal/");
conn = ((program)"../spm/client_base.pike")();
conn->connect_server(host,port);
conn->login("root","steam",1);
connRoot = ((program)"../spm/client_base.pike")();
connRoot->connect_server(host,port);
connRoot->login("root","steam",1);
_ServerRoot = connRoot->SteamObj(0);
_Server = conn->SteamObj(0);
me = _Server->get_module("users")->lookup("root");
me->move(OBJ("/"));
write("Creating test room\n\n");
_Server->get_factory("Room")->execute((["name":"TestRoom"]))->move(OBJ("/"));
me->move(OBJ("/TestRoom"));
createUser("TestUser","password");
conn->login("TestUser","password",1);
me = _Server->get_module("users")->lookup("TestUser");
_Server->get_factory("Room")->execute((["name":"TestRoom"]))->move(OBJ("/home/TestUser"));
me->move(OBJ("/home/TestUser"));
write("===============================\n");
}

//Fetch the file containing the code for the test.
//Get all the test cases and execute them one by one
//record the status of the test
int run(){
string n = name +".pike";
object code = ((program)n)();
object code = ((program)n)(); // Fetch the code for test cases as an object
array(function) foo = values(code);
int success = 0;
for(int i=0;i< sizeof(cases);i++){
if(foo[i](me,_Server,conn)==1){
for(int i=0;i< cases;i++){ //loop through the cases and execute them one by one
if(foo[i](me,_Server,conn,createUser)==1){
success+=1;
}

}
write("success: "+success+"\nfails: "+(sizeof(cases)-success)+"\n");
write("success: "+success+"\nfails: "+(cases-success)+"\n");
}

int createUser(string name,string password){
int result = 0;
object user = _ServerRoot->get_module("users")->get_user(name);
if(user)user->delete();
mixed res = catch{
_ServerRoot->get_factory("User")->execute((["name":name,"pw":password]));
_ServerRoot->get_module("users")->get_user(name)->activate_user();
};
if (res=0){write("Error creating user");return 0;}
else return 1;
}
}



int main(){
Test move = Test("move",4);
move->run();
Test create = Test("create",3);
move->clear();
Test create = Test("create",2);
create->run();
create->clear();
Test getEnv = Test("getEnv",1);
getEnv->run();
getEnv->clear();
Test perm = Test("userPermission",1);
perm->run();

perm->clear();
}
22 changes: 10 additions & 12 deletions tests/coal-pike/userPermission.pike
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
#define OBJ(o) _Server->get_module("filepath:tree")->path_to_object(o)

//Tests file permissions
int test(object me,object _Server,object...args)
{
int pass = 0;
_Server->get_factory("User")->execute((["name":"testUser1","pw":"password1"]));
_Server->get_factory("User")->execute((["name":"testUser2","pw":"password2"]));
object user1 = _Server->get_module("users")->get_user("testUser1");
object user2 = _Server->get_module("users")->get_user("testUser2");
user1->activate_user();
user2->activate_user();
args[1]("testUser1","password1");
args[1]("testUser2","password2");
args[0]->login("testUser1","password1",1);
_Server->get_factory("Container")->execute((["name":"testCont"]))->move(OBJ("/home/testUser1"));
_Server->get_factory("Container")->execute((["name":"testCont"]))->move(OBJ("/home/testUser1")); //object being created by user1 and it belongs to user1.
args[0]->login("testUser2","password2",1);
write("Trying to access container created by user1 as user2: ");
mixed result = catch{OBJ("/home/testUser1/testCont")->delete();};
mixed result = catch{OBJ("/home/testUser1/testCont")->delete();}; //User2 trys deleting the object belonging to user1
if(result!=0){
pass=1;
write("passed\n");
}
else write("failed\n");
args[0]->login("root","steam",1);
user1->delete();
user2->delete();
return pass;
// args[0]->login("root","steam",1);
// user1->delete();
// user2->delete();
args[0]->login("TestUser","password",1);
return pass;
}