def varlink_help(args): deli = args.INTERFACE.rfind("/") if deli != -1: address = args.INTERFACE[:deli] interface = args.INTERFACE[deli + 1:] client = varlink.Client(address) else: interface = args.INTERFACE client = varlink.Client(resolve_interface=interface, resolver=args.resolver) ifaces = client.get_interfaces() if interface in ifaces: print(ifaces[interface].description)
def run_client(address): print('Connecting to %s' % address) with varlink.Client(address) as client, \ client.open('org.varlink.certification') as con: ret = con.Start() client_id = ret["client_id"] print("client_id:", client_id) ret = con.Test01(client_id) print("Test01:", ret) ret = con.Test02(client_id, ret["bool"]) print("Test02:", ret) ret = con.Test03(client_id, ret["int"]) print("Test03:", ret) ret = con.Test04(client_id, ret["float"]) print("Test04:", ret) ret = con.Test05(client_id, ret["string"]) print("Test05:", ret) ret = con.Test06(client_id, ret["bool"], ret["int"], ret["float"], ret["string"]) print("Test06:", ret) ret = con.Test07(client_id, ret["struct"]) print("Test07:", ret) ret = con.Test08(client_id, ret["map"]) print("Test08:", ret) ret = con.Test09(client_id, ret["set"]) print("Test09:", ret) ret_array = [] for ret in con.Test10(client_id, ret["mytype"], _more=True): print("Test10:", ret) ret_array.append(ret["string"]) ret = con.Test11(client_id, ret_array, _oneway=True) print("Test11:", ret) ret = con.End(client_id) print("End:", ret) print("Certification passed")
def do_run(self, address): server = varlink.ThreadingServer(address, ServiceRequestHandler) server_thread = threading.Thread(target=server.serve_forever) server_thread.daemon = True server_thread.start() try: with varlink.Client(address) as client, \ client.open('org.varlink.service') as _connection: info = _connection.GetInfo() self.assertEqual(len(info['interfaces']), 1) self.assertEqual(info['interfaces'][0], "org.varlink.service") self.assertEqual(info, service.GetInfo()) desc = _connection.GetInterfaceDescription( info['interfaces'][0]) self.assertEqual( desc, service.GetInterfaceDescription("org.varlink.service")) _connection.close() finally: server.shutdown() server.server_close()
def run_client(address): print('Connecting to %s\n' % address) try: with varlink.Client(address) as client, \ client.open('org.example.more', namespaced=True) as con1, \ client.open('org.example.more', namespaced=True) as con2: for m in con1.TestMore(10, _more=True): if hasattr(m.state, 'start') and m.state.start != None: if m.state.start: print("--- Start ---", file=sys.stderr) if hasattr(m.state, 'end') and m.state.end != None: if m.state.end: print("--- End ---", file=sys.stderr) if hasattr(m.state, 'progress') and m.state.progress != None: print("Progress:", m.state.progress, file=sys.stderr) if m.state.progress > 50: ret = con2.Ping("Test") print("Ping: ", ret.pong) except varlink.ConnectionError as e: print("ConnectionError:", e) raise e except varlink.VarlinkError as e: print(e) print(e.error()) print(e.parameters()) raise e
def varlink_info(args): with varlink.Client(args.ADDRESS) as client: info = client.info print("Vendor:", info["vendor"]) print("Product:", info["product"]) print("Version:", info["version"]) print("URL:", info["url"]) print("Interfaces:") for i in info["interfaces"]: print(" ", i)
def varlink_call(args): deli = args.METHOD.rfind(".") if deli == -1: print("No method found", file=sys.stderr) sys.exit(1) method = args.METHOD[deli + 1:] interface = args.METHOD[:deli] deli = args.METHOD.find("/") if deli != -1: address = interface[:deli] interface = interface[deli + 1:] client = varlink.Client(address) else: client = varlink.Client(resolve_interface=interface, resolver=args.resolver) got = False try: with client.open(interface) as con: out = { 'method': interface + '.' + method, 'more': args.more, 'parameters': json.loads(args.ARGUMENTS) } con._send_message( json.dumps(out, cls=varlink.VarlinkEncoder).encode('utf-8')) more = True while more: (message, more) = con._next_varlink_message() if message: print(message) got = True except varlink.VarlinkError as e: print(e, file=sys.stderr) except BrokenPipeError: if not got or args.more: print("Connection closed") sys.exit(1)
def test_service(self): address = "tcp:127.0.0.1:23451" Example.sleep_duration = 0.1 server = varlink.ThreadingServer(address, ServiceRequestHandler) server_thread = threading.Thread(target=server.serve_forever) server_thread.daemon = True server_thread.start() try: run_client(address) with varlink.Client(address=address) as client, \ client.open('org.example.more', namespaced=True) as con1, \ client.open('org.example.more', namespaced=True) as con2: self.assertEqual(con1.Ping("Test").pong, "Test") it = con1.TestMore(10, _more=True) m = next(it) self.assertTrue(hasattr(m.state, 'start')) self.assertFalse(hasattr(m.state, 'end')) self.assertFalse(hasattr(m.state, 'progress')) self.assertIsNotNone(m.state.start) for i in range(0, 110, 10): m = next(it) self.assertTrue(hasattr(m.state, 'progress')) self.assertFalse(hasattr(m.state, 'start')) self.assertFalse(hasattr(m.state, 'end')) self.assertIsNotNone(m.state.progress) self.assertEqual(i, m.state.progress) if i > 50: ret = con2.Ping("Test") self.assertEqual("Test", ret.pong) m = next(it) self.assertTrue(hasattr(m.state, 'end')) self.assertFalse(hasattr(m.state, 'start')) self.assertFalse(hasattr(m.state, 'progress')) self.assertIsNotNone(m.state.end) self.assertRaises(StopIteration, next, it) con1.StopServing(_oneway=True) time.sleep(0.5) self.assertRaises(varlink.ConnectionError, con1.Ping, "Test") finally: server.shutdown() server.server_close()
def test_01(self): with varlink.Client(self.address) as client, \ client.open('org.varlink.certification') as con: ret = con.Start() client_id = ret["client_id"] ret = con.Test01(client_id) print("Test01:", ret) ret = con.Test02(client_id, ret["bool"]) print("Test02:", ret) self.assertRaises(varlink.VarlinkError, con.Test03, "test") self.assertRaises(varlink.VarlinkError, con.Test03, client_id, 0) self.assertRaises(varlink.VarlinkError, con.Test03, client_id, ret["int"]) ret = con.Start() client_id = ret["client_id"] ret = con.Test01(client_id) print("Test01:", ret) ret = con.Test02(client_id, ret["bool"]) print("Test02:", ret) self.assertRaises(varlink.VarlinkError, con.Test01, client_id)
# 使用varlink协议访问podman服务,创建容器,获取容器信息,结束容器 import json import varlink addr = "unix:/run/podman/io.podman" iface = "io.podman" method = "ListContainers" client = varlink.Client("unix:/run/podman/io.podman") connection = client.open("io.podman") containerlist = connection._call("ListContainers")['containers'] print(containerlist[0]['names'])
def test_init(self): with varlink.Client("unix:@foo") as client: connection = client.open('org.service.com') self.assertEqual(connection.Test1(param1=1)["test"]["bar"], "boom") self.assertEqual(connection.Test3(param1="foo")["test"], "foo")
def setUp(self): """Set up the varlink/podman fixture before each test.""" super(PodmanTestCase, self).setUp() self.client = varlink.Client( address=self.address) self.podman = self.client.open('io.projectatomic.podman')