public void PyroClassesSerpent() { var ser = new SerpentSerializer(); var uri = new PyroURI("PYRO:something@localhost:4444"); byte[] s = ser.serializeData(uri); object x = ser.deserializeData(s); Assert.AreEqual(uri, x); var proxy = new PyroProxy(uri); proxy.correlation_id = Guid.NewGuid(); proxy.pyroHandshake = "apples"; proxy.pyroHmacKey = Encoding.UTF8.GetBytes("secret"); proxy.pyroAttrs = new HashSet<string>(); proxy.pyroAttrs.Add("attr1"); proxy.pyroAttrs.Add("attr2"); s = ser.serializeData(proxy); x = ser.deserializeData(s); PyroProxy proxy2 = (PyroProxy) x; Assert.AreEqual(uri.host, proxy2.hostname); Assert.AreEqual(uri.objectid, proxy2.objectid); Assert.AreEqual(uri.port, proxy2.port); Assert.IsNull(proxy2.correlation_id, "correlation_id is not serialized on the proxy object"); Assert.AreEqual(proxy.pyroHandshake, proxy2.pyroHandshake); Assert.AreEqual(proxy.pyroHmacKey, proxy2.pyroHmacKey); Assert.AreEqual(2, proxy2.pyroAttrs.Count); Assert.AreEqual(proxy.pyroAttrs, proxy2.pyroAttrs); PyroException ex = new PyroException("error"); s = ser.serializeData(ex); x = ser.deserializeData(s); PyroException ex2 = (PyroException) x; Assert.AreEqual(ex.Message, ex2.Message); Assert.IsNull(ex._pyroTraceback); // try another kind of pyro exception s = Encoding.UTF8.GetBytes("{'attributes':{'tb': 'traceback', '_pyroTraceback': ['line1', 'line2']},'__exception__':True,'args':('hello',42),'__class__':'CommunicationError'}"); x = ser.deserializeData(s); ex2 = (PyroException) x; Assert.AreEqual("hello", ex2.Message); Assert.AreEqual("traceback", ex2.Data["tb"]); Assert.AreEqual("line1line2", ex2._pyroTraceback); }
public void UnserpentProxy() { byte[] data = Encoding.UTF8.GetBytes("# serpent utf-8 python3.2\n" + "{'state':('PYRO:Pyro.NameServer@localhost:9090',(),('count','lookup','register','ping','list','remove'),(),0.0,'b64:c2VjcmV0','hello',0),'__class__':'Pyro4.core.Proxy'}"); SerpentSerializer ser = new SerpentSerializer(); PyroProxy p = (PyroProxy) ser.deserializeData(data); Assert.IsNull(p.correlation_id); Assert.AreEqual("Pyro.NameServer", p.objectid); Assert.AreEqual("localhost", p.hostname); Assert.AreEqual(9090, p.port); Assert.AreEqual("hello", p.pyroHandshake); Assert.AreEqual(Encoding.UTF8.GetBytes("secret"), p.pyroHmacKey); Assert.AreEqual(0, p.pyroAttrs.Count); Assert.AreEqual(0, p.pyroOneway.Count); Assert.AreEqual(6, p.pyroMethods.Count); ISet<string> methods = new HashSet<string>(); methods.Add("ping"); methods.Add("count"); methods.Add("lookup"); methods.Add("list"); methods.Add("register"); methods.Add("remove"); CollectionAssert.AreEquivalent(methods, p.pyroMethods); }