client.kvI(alice, "k1", afile1)) cse303.do_cmd("Upserting key k1.", "OKUPD", client.kvU(alice, "k1", afile2)) cse303.do_cmd("Getting key k1.", "OK", client.kvG(alice, "k1")) cse303.check_file_result(afile2, "k1") cse303.line() # Test upsert cse303.do_cmd("Upserting key k2.", "OKINS", client.kvU(alice, "k2", afile1)) cse303.do_cmd("Getting key k2.", "OK", client.kvG(alice, "k2")) cse303.check_file_result(afile1, "k2") cse303.line() # Test all cse303.do_cmd("Getting all keys to make sure it's k1 and k2.", "OK", client.kvA(alice, allfile)) cse303.check_file_list(allfile, ["k1", "k2"]) cse303.line() # Test delete cse303.do_cmd("Deleting key k2.", "OK", client.kvD(alice, "k2")) cse303.do_cmd("Getting key k2.", "ERR_KEY", client.kvG(alice, "k2")) cse303.do_cmd("Getting key k7.", "ERR_KEY", client.kvG(alice, "k7")) cse303.line() # Test persist cse303.do_cmd("Inserting key k3.", "OK", client.kvI(alice, "k3", afile1)) cse303.do_cmd("Instructing server to persist data.", "OK", client.persist(alice)) cse303.line() cse303.do_cmd("Stopping server.", "OK", client.bye(alice)) cse303.await_server("Waiting for server to shut down.", "Server terminated",
# Test for upload quota violations cse303.do_cmd("Setting key k8 to 1K file.", "ERR_QUOTA_UP", client.kvI(alice, "k8", t1kname)) cse303.do_cmd("Updating key k9 to 1K file.", "ERR_QUOTA_UP", client.kvU(alice, "k9", t1kname)) cse303.do_cmd("Upserting key k7 to 1K file.", "ERR_QUOTA_UP", client.kvU(alice, "k7", t1kname)) cse303.line() # Bob is still good cse303.do_cmd("Upserting key k7 to 1K file.", "OKUPD", client.kvU(bob, "k7", t1kname)) cse303.line() # Use up almost all of our download quota cse303.do_cmd("Getting key k1.", "OK", client.kvG(alice, "k1")) cse303.check_file_result(t1kname, "k1") cse303.do_cmd("Getting all keys.", "OK", client.kvA(alice, allkeys)) cse303.check_file_list(allkeys, ["k1", "k2", "k3", "k4", "k5", "k6", "k7"]) cse303.do_cmd("Getting key k2.", "OK", client.kvG(alice, "k2")) cse303.check_file_result(t1kname, "k2") cse303.do_cmd("Getting key k3.", "OK", client.kvG(alice, "k3")) cse303.check_file_result(t1kname, "k3") cse303.do_cmd("Getting key k4.", "OK", client.kvG(alice, "k4")) cse303.check_file_result(t1kname, "k4") cse303.do_cmd("Getting key k5.", "OK", client.kvG(alice, "k5")) cse303.check_file_result(t1kname, "k5") cse303.do_cmd("Getting key k6.", "OK", client.kvG(alice, "k6")) cse303.check_file_result(t1kname, "k6") cse303.do_cmd("Getting key k7.", "OK", client.kvG(alice, "k7")) cse303.check_file_result(t1kname, "k7") cse303.line() # Now let's see a violation, followed by a non-violation
cse303.delfile("k" + str(i)) cse303.line() # Test that registration of functions properly authenticates cse303.do_cmd("Registering function.", "OK", client.kvF(alice, "all_keys", so1)) cse303.do_cmd("Re-registering function.", "ERR_FUNC", client.kvF(alice, "all_keys", so1)) cse303.do_cmd("Registering function from bob.", "ERR_LOGIN", client.kvF(bob, "mr2", so1)) cse303.line() # Bob should be able to invoke a function cse303.do_cmd("Executing map/reduce.", "OK", client.kMR(bob, "all_keys", mrfile)) cse303.check_file_list(mrfile, ["k1", "k2", "k3", "k4", "k5", "k6", "k7", "k8"]) cse303.line() # Alice should be able to register and invoke a function cse303.do_cmd("Registering function.", "OK", client.kvF(alice, "odd_key_vals", so2)) cse303.do_cmd("Executing map/reduce.", "OK", client.kMR(alice, "odd_key_vals", mrfile)) cse303.check_file_list(mrfile, ["11", "33", "55", "77"]) cse303.line() # Clean up cse303.do_cmd("Stopping server.", "OK", client.bye(alice)) cse303.await_server("Waiting for server to shut down.", "Server terminated", server.pid) cse303.line()
cse303.override_exe(server, client) # Clean up the file system from the last run, kill active servers cse303.clean_common_files(server, client) cse303.killall("server.exe") # Register users, put content, persist server.pid = cse303.do_cmd("Starting server.", "File not found: " + server.dirfile, server.launchcmd()) cse303.waitfor(2) cse303.line() cse303.do_cmd("Registering new user alice.", "OK", client.reg(alice)) cse303.do_cmd("Setting alice's content.", "OK", client.setC(alice, afile1)) cse303.do_cmd("Checking alice's content.", "OK", client.getC(alice, alice.name)) cse303.check_file_result(afile1, alice.name) cse303.do_cmd("Getting all users to make sure it's just alice.", "OK", client.getA(alice, allfile)) cse303.check_file_list(allfile, [alice.name]) cse303.do_cmd("Instructing server to persist data.", "OK", client.persist(alice)) cse303.line() cse303.do_cmd("Stopping server.", "OK", client.bye(alice)) cse303.await_server("Waiting for server to shut down.", "Server terminated", server.pid) cse303.line() # Ensure persistentce works, test other features server.pid = cse303.do_cmd("Restarting server to check persistence.", "Loaded: " + server.dirfile, server.launchcmd()) cse303.waitfor(2) cse303.line() cse303.do_cmd("Re-registering alice.", "ERR_USER_EXISTS", client.reg(alice)) cse303.do_cmd("Checking alice's old content.", "OK", client.getC(alice, alice.name)) cse303.check_file_result(afile1, alice.name) cse303.do_cmd("Attempting access with bad password.", "ERR_LOGIN", client.getC(fakealice, alice.name)) cse303.do_cmd("Attempting access with bad user.", "ERR_LOGIN", client.getC(bob, alice.name))