def _check_add(ign): furl1,servicedir1a = cli.add_service(serverdir, "upload-file", (incomingdir,), None) self.failUnless(os.path.isdir(servicedir1a)) asd1 = os.path.abspath(servicedir1a) self.failUnless(asd1.startswith(os.path.abspath(basedir))) swiss1 = furl1[furl1.rfind("/")+1:] data = server.load_service_data(serverdir) servicedir1b = os.path.join(serverdir, data["services"][swiss1]["relative_basedir"]) self.failUnlessEqual(os.path.abspath(servicedir1a), os.path.abspath(servicedir1b)) # add a second service, to make sure the "find the next-highest # available servicedir" logic works from both empty and non-empty # starting points furl2,servicedir2a = cli.add_service(serverdir, "run-command", ("dummy",), None) self.failUnless(os.path.isdir(servicedir2a)) asd2 = os.path.abspath(servicedir2a) self.failUnless(asd2.startswith(os.path.abspath(basedir))) swiss2 = furl2[furl2.rfind("/")+1:] data = server.load_service_data(serverdir) servicedir2b = os.path.join(serverdir, data["services"][swiss2]["relative_basedir"]) self.failUnlessEqual(os.path.abspath(servicedir2a), os.path.abspath(servicedir2b))
def test_parse_files_and_upgrade(self): # create a structure with individual files, and make sure we parse it # correctly. Test the git-foolscap case with slashes in the swissnum. basedir = "appserver/ServiceData/parse_files" os.makedirs(basedir) J = os.path.join f = open(os.path.join(basedir, "furl_prefix"), "wb") f.write(b"prefix") f.close() old_add_service(basedir, "type1", ("args1a", "args1b"), None, "swiss1") old_add_service(basedir, "type2", ("args2a", "args2b"), "comment2", "swiss2") old_add_service(basedir, "type3", ("args3a", "args3b"), "comment3", "swiss3/3") data = server.load_service_data(basedir) expected = { "version": 1, "services": { "swiss1": { "relative_basedir": J("services", "swiss1"), "type": "type1", "args": ["args1a", "args1b"], "comment": None, }, "swiss2": { "relative_basedir": J("services", "swiss2"), "type": "type2", "args": ["args2a", "args2b"], "comment": "comment2", }, J("swiss3", "3"): { "relative_basedir": J("services", "swiss3", "3"), "type": "type3", "args": ["args3a", "args3b"], "comment": "comment3", }, } } self.assertEqual(data, expected) s4 = { "relative_basedir": J("services", "4"), "type": "type4", "args": ["args4a", "args4b"], "comment": "comment4", } data["services"]["swiss4"] = s4 server.save_service_data(basedir, data) # this upgrades to JSON data2 = server.load_service_data(basedir) # reads JSON, not files expected["services"]["swiss4"] = s4 self.assertEqual(data2, expected)
def test_parse_files_and_upgrade(self): # create a structure with individual files, and make sure we parse it # correctly. Test the git-foolscap case with slashes in the swissnum. basedir = "appserver/ServiceData/parse_files" os.makedirs(basedir) J = os.path.join f = open(os.path.join(basedir, "furl_prefix"), "wb") f.write("prefix") f.close() old_add_service(basedir, "type1", ("args1a", "args1b"), None, "swiss1") old_add_service(basedir, "type2", ("args2a", "args2b"), "comment2", "swiss2") old_add_service(basedir, "type3", ("args3a", "args3b"), "comment3", "swiss3/3") data = server.load_service_data(basedir) expected = {"version": 1, "services": { "swiss1": {"relative_basedir": J("services","swiss1"), "type": "type1", "args": ["args1a", "args1b"], "comment": None, }, "swiss2": {"relative_basedir": J("services","swiss2"), "type": "type2", "args": ["args2a", "args2b"], "comment": "comment2", }, J("swiss3","3"): {"relative_basedir": J("services","swiss3","3"), "type": "type3", "args": ["args3a", "args3b"], "comment": "comment3", }, }} self.failUnlessEqual(data, expected) s4 = {"relative_basedir": J("services","4"), "type": "type4", "args": ["args4a", "args4b"], "comment": "comment4", } data["services"]["swiss4"] = s4 server.save_service_data(basedir, data) # this upgrades to JSON data2 = server.load_service_data(basedir) # reads JSON, not files expected["services"]["swiss4"] = s4 self.failUnlessEqual(data2, expected)
def add_service(basedir, service_type, service_args, comment, swissnum=None): if not swissnum: swissnum = make_swissnum() services_data = load_service_data(basedir) relative_service_basedir = find_next_service_basedir(basedir) service_basedir = os.path.join(basedir, relative_service_basedir) os.makedirs(service_basedir) try: # validate the service args by instantiating one s = build_service(service_basedir, None, service_type, service_args) del s except: shutil.rmtree(service_basedir) raise services_data["services"][swissnum] = { "relative_basedir": relative_service_basedir, "type": service_type, "args": service_args, "comment": comment, } save_service_data(basedir, services_data) furl_prefix = open(os.path.join(basedir, "furl_prefix")).read().strip() furl = furl_prefix + swissnum return furl, service_basedir
def test_save(self): basedir = "appserver/ServiceData/save" os.makedirs(basedir) server.save_service_data(basedir, orig_service_data) data = server.load_service_data(basedir) self.failUnlessEqual(orig_service_data, data)
def add_service(basedir, service_type, service_args, comment, swissnum=None): if not swissnum: swissnum = make_swissnum() services_data = load_service_data(basedir) relative_service_basedir = find_next_service_basedir(basedir) service_basedir = os.path.join(basedir, relative_service_basedir) os.makedirs(service_basedir) try: # validate the service args by instantiating one s = build_service(service_basedir, None, service_type, service_args) del s except: shutil.rmtree(service_basedir) raise services_data["services"][swissnum] = { "relative_basedir": relative_service_basedir, "type": service_type, "args": service_args, "comment": comment, } save_service_data(basedir, services_data) furl_prefix = open(os.path.join(basedir, "furl_prefix")).read().strip() furl = furl_prefix + swissnum return furl, service_basedir
def test_parse_json(self): basedir = "appserver/ServiceData/parse_json" os.makedirs(basedir) f = open(os.path.join(basedir, "services.json"), "wb") json.dump(orig_service_data, f) f.close() data = server.load_service_data(basedir) self.failUnlessEqual(orig_service_data, data)
def test_parse_json(self): basedir = "appserver/ServiceData/parse_json" os.makedirs(basedir) with open(os.path.join(basedir, "services.json"), "w") as f: json.dump(orig_service_data, f) data = server.load_service_data(basedir) self.assertEqual(orig_service_data, data)
def list_services(basedir): furl_prefix = open(os.path.join(basedir, "furl_prefix")).read().strip() services_data = load_service_data(basedir)["services"] services = [] for swissnum, data in sorted(services_data.items()): s = FlappService() s.swissnum = swissnum s.service_basedir = os.path.join(basedir, data["relative_basedir"]) s.service_type = data["type"] s.service_args = data["args"] s.comment = data["comment"] # maybe None s.furl = furl_prefix + swissnum services.append(s) return services
def _check_add((rc,out,err)): self.failUnlessEqual(rc, 0) lines = out.splitlines() self.failUnless(lines[0].startswith("Service added in ")) servicedir = lines[0].split()[-1] self.failUnless(lines[1].startswith("FURL is pb://")) furl = lines[1].split()[-1] swiss = furl[furl.rfind("/")+1:] data = server.load_service_data(serverdir) servicedir2 = os.path.join(serverdir, data["services"][swiss]["relative_basedir"]) self.failUnlessEqual(os.path.abspath(servicedir), os.path.abspath(servicedir2)) self.failUnlessEqual(data["services"][swiss]["comment"], None)
def list_services(basedir): furl_prefix = open(os.path.join(basedir, "furl_prefix")).read().strip() services_data = load_service_data(basedir)["services"] services = [] for swissnum, data in sorted(services_data.items()): s = FlappService() s.swissnum = swissnum s.service_basedir = os.path.join(basedir, data["relative_basedir"]) s.service_type = data["type"] s.service_args = data["args"] s.comment = data["comment"] # maybe None s.furl = furl_prefix + swissnum services.append(s) return services
def _check_add(xxx_todo_changeme8): (rc, out, err) = xxx_todo_changeme8 self.assertEqual(rc, 0) lines = out.splitlines() self.assertTrue(lines[0].startswith("Service added in ")) servicedir = lines[0].split()[-1] self.assertTrue(lines[1].startswith("FURL is pb://")) furl = lines[1].split()[-1] swiss = furl[furl.rfind("/") + 1:] data = server.load_service_data(serverdir) servicedir2 = os.path.join( serverdir, data["services"][swiss]["relative_basedir"]) self.assertEqual(os.path.abspath(servicedir), os.path.abspath(servicedir2)) self.assertEqual(data["services"][swiss]["comment"], "commentary here")