summaryrefslogtreecommitdiff
path: root/js/test/Ice/proxy
diff options
context:
space:
mode:
Diffstat (limited to 'js/test/Ice/proxy')
-rw-r--r--js/test/Ice/proxy/.gitignore2
-rw-r--r--js/test/Ice/proxy/Client.js961
-rw-r--r--js/test/Ice/proxy/Makefile23
-rw-r--r--js/test/Ice/proxy/Makefile.mak20
-rw-r--r--js/test/Ice/proxy/Test.ice29
-rw-r--r--js/test/Ice/proxy/run.js10
-rwxr-xr-xjs/test/Ice/proxy/run.py27
7 files changed, 1072 insertions, 0 deletions
diff --git a/js/test/Ice/proxy/.gitignore b/js/test/Ice/proxy/.gitignore
new file mode 100644
index 00000000000..d158d9308ba
--- /dev/null
+++ b/js/test/Ice/proxy/.gitignore
@@ -0,0 +1,2 @@
+Test.js
+index.html
diff --git a/js/test/Ice/proxy/Client.js b/js/test/Ice/proxy/Client.js
new file mode 100644
index 00000000000..89884560d00
--- /dev/null
+++ b/js/test/Ice/proxy/Client.js
@@ -0,0 +1,961 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+(function(global){
+ var require = typeof(module) !== "undefined" ? module.require : function(){};
+ require("Ice/Ice");
+ require("Test");
+ var Ice = global.Ice;
+ var Test = global.Test;
+ var Promise = Ice.Promise;
+
+ function allTests(communicator, out)
+ {
+ var p = new Ice.Promise();
+ var test = function(b)
+ {
+ if(!b)
+ {
+ try
+ {
+ throw new Error("test failed");
+ }
+ catch(err)
+ {
+ p.fail(err);
+ throw err;
+ }
+ }
+ };
+
+ var ref, base, prx, cl, derived, cl10, cl20, cl13, port;
+
+ var defaultProtocol = communicator.getProperties().getPropertyWithDefault("Ice.Default.Protocol", "tcp");
+
+ return Promise.try(
+ function()
+ {
+ out.write("testing stringToProxy... ");
+ ref = "test:default -p 12010";
+ base = communicator.stringToProxy(ref);
+ test(base !== null);
+
+ var b1 = communicator.stringToProxy("test");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getAdapterId().length === 0 && b1.ice_getFacet().length === 0);
+ b1 = communicator.stringToProxy("test ");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet().length === 0);
+ b1 = communicator.stringToProxy(" test ");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet().length === 0);
+ b1 = communicator.stringToProxy(" test");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet().length === 0);
+ b1 = communicator.stringToProxy("'test -f facet'");
+ test(b1.ice_getIdentity().name === "test -f facet" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet().length === 0);
+ try
+ {
+ b1 = communicator.stringToProxy("\"test -f facet'");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.ProxyParseException))
+ {
+ test(false);
+ }
+ }
+
+ b1 = communicator.stringToProxy("\"test -f facet\"");
+ test(b1.ice_getIdentity().name === "test -f facet" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet().length === 0);
+ b1 = communicator.stringToProxy("\"test -f facet@test\"");
+ test(b1.ice_getIdentity().name === "test -f facet@test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet().length === 0);
+ b1 = communicator.stringToProxy("\"test -f facet@test @test\"");
+ test(b1.ice_getIdentity().name === "test -f facet@test @test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet().length === 0);
+ try
+ {
+ b1 = communicator.stringToProxy("test test");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.ProxyParseException))
+ {
+ test(false);
+ }
+ }
+
+ b1 = communicator.stringToProxy("test\\040test");
+ test(b1.ice_getIdentity().name === "test test" && b1.ice_getIdentity().category.length === 0);
+ try
+ {
+ b1 = communicator.stringToProxy("test\\777");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.IdentityParseException))
+ {
+ test(false);
+ }
+ }
+ b1 = communicator.stringToProxy("test\\40test");
+ test(b1.ice_getIdentity().name === "test test");
+
+ // Test some octal and hex corner cases.
+ b1 = communicator.stringToProxy("test\\4test");
+ test(b1.ice_getIdentity().name === "test\x04test");
+ b1 = communicator.stringToProxy("test\\04test");
+ test(b1.ice_getIdentity().name === "test\x04test");
+ b1 = communicator.stringToProxy("test\\004test");
+ test(b1.ice_getIdentity().name === "test\x04test");
+ b1 = communicator.stringToProxy("test\\1114test");
+ test(b1.ice_getIdentity().name === "test\x494test");
+
+ b1 = communicator.stringToProxy("test\\b\\f\\n\\r\\t\\'\\\"\\\\test");
+ test(b1.ice_getIdentity().name === "test\b\f\n\r\t\'\"\\test" &&
+ b1.ice_getIdentity().category.length === 0);
+
+ b1 = communicator.stringToProxy("category/test");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category === "category" &&
+ b1.ice_getAdapterId().length === 0);
+
+ b1 = communicator.stringToProxy("");
+ test(b1 === null);
+ b1 = communicator.stringToProxy("\"\"");
+ test(b1 === null);
+ try
+ {
+ b1 = communicator.stringToProxy("\"\" test"); // Invalid trailing characters.
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.ProxyParseException))
+ {
+ test(false);
+ }
+ }
+ try
+ {
+ b1 = communicator.stringToProxy("test:"); // Missing endpoint.
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.EndpointParseException))
+ {
+ test(false);
+ }
+ }
+
+ b1 = communicator.stringToProxy("test@adapter");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getAdapterId() === "adapter");
+ try
+ {
+ b1 = communicator.stringToProxy("id@adapter test");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.ProxyParseException))
+ {
+ test(false);
+ }
+ }
+ b1 = communicator.stringToProxy("category/test@adapter");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category === "category" &&
+ b1.ice_getAdapterId() === "adapter");
+ b1 = communicator.stringToProxy("category/test@adapter:" + defaultProtocol);
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category === "category" &&
+ b1.ice_getAdapterId() === "adapter:" + defaultProtocol);
+ b1 = communicator.stringToProxy("'category 1/test'@adapter");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category === "category 1" &&
+ b1.ice_getAdapterId() === "adapter");
+ b1 = communicator.stringToProxy("'category/test 1'@adapter");
+ test(b1.ice_getIdentity().name === "test 1" && b1.ice_getIdentity().category === "category" &&
+ b1.ice_getAdapterId() === "adapter");
+ b1 = communicator.stringToProxy("'category/test'@'adapter 1'");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category === "category" &&
+ b1.ice_getAdapterId() === "adapter 1");
+ b1 = communicator.stringToProxy("\"category \\/test@foo/test\"@adapter");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category === "category /test@foo" &&
+ b1.ice_getAdapterId() === "adapter");
+ b1 = communicator.stringToProxy("\"category \\/test@foo/test\"@\"adapter:" + defaultProtocol + "\"");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category === "category /test@foo" &&
+ b1.ice_getAdapterId() === "adapter:" + defaultProtocol);
+
+ b1 = communicator.stringToProxy("id -f facet");
+ test(b1.ice_getIdentity().name === "id" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet");
+ b1 = communicator.stringToProxy("id -f 'facet x'");
+ test(b1.ice_getIdentity().name === "id" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet x");
+ b1 = communicator.stringToProxy("id -f \"facet x\"");
+ test(b1.ice_getIdentity().name === "id" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet x");
+ try
+ {
+ b1 = communicator.stringToProxy("id -f \"facet x");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.ProxyParseException))
+ {
+ test(false);
+ }
+ }
+ try
+ {
+ b1 = communicator.stringToProxy("id -f \'facet x");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.ProxyParseException))
+ {
+ test(false);
+ }
+ }
+ b1 = communicator.stringToProxy("test -f facet:" + defaultProtocol);
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet" && b1.ice_getAdapterId().length === 0);
+ b1 = communicator.stringToProxy("test -f \"facet:" + defaultProtocol + "\"");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet:" + defaultProtocol && b1.ice_getAdapterId().length === 0);
+ b1 = communicator.stringToProxy("test -f facet@test");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet" && b1.ice_getAdapterId() === "test");
+ b1 = communicator.stringToProxy("test -f 'facet@test'");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet@test" && b1.ice_getAdapterId().length === 0);
+ b1 = communicator.stringToProxy("test -f 'facet@test'@test");
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getFacet() === "facet@test" && b1.ice_getAdapterId() === "test");
+ try
+ {
+ b1 = communicator.stringToProxy("test -f facet@test @test");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.ProxyParseException))
+ {
+ test(false);
+ }
+ }
+ b1 = communicator.stringToProxy("test");
+ test(b1.ice_isTwoway());
+ b1 = communicator.stringToProxy("test -t");
+ test(b1.ice_isTwoway());
+ b1 = communicator.stringToProxy("test -o");
+ test(b1.ice_isOneway());
+ b1 = communicator.stringToProxy("test -O");
+ test(b1.ice_isBatchOneway());
+ b1 = communicator.stringToProxy("test -d");
+ test(b1.ice_isDatagram());
+ b1 = communicator.stringToProxy("test -D");
+ test(b1.ice_isBatchDatagram());
+ b1 = communicator.stringToProxy("test");
+ test(!b1.ice_isSecure());
+ b1 = communicator.stringToProxy("test -s");
+ test(b1.ice_isSecure());
+
+ test(b1.ice_getEncodingVersion().equals(Ice.currentEncoding()));
+
+ b1 = communicator.stringToProxy("test -e 1.0");
+ test(b1.ice_getEncodingVersion().major === 1 && b1.ice_getEncodingVersion().minor === 0);
+
+ b1 = communicator.stringToProxy("test -e 6.5");
+ test(b1.ice_getEncodingVersion().major === 6 && b1.ice_getEncodingVersion().minor === 5);
+
+ b1 = communicator.stringToProxy("test -p 1.0 -e 1.0");
+ test(b1.toString() === "test -t -e 1.0");
+
+ b1 = communicator.stringToProxy("test -p 6.5 -e 1.0");
+ test(b1.toString() === "test -t -p 6.5 -e 1.0");
+
+ try
+ {
+ b1 = communicator.stringToProxy("test:" + defaultProtocol + "@adapterId");
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.EndpointParseException))
+ {
+ test(false);
+ }
+ }
+ // This is an unknown endpoint warning, not a parse exception.
+ //
+ //try
+ //{
+ // b1 = communicator.stringToProxy("test -f the:facet:tcp");
+ // test(false);
+ //}
+ //catch(ex:Ice.EndpointParseException)
+ //{
+ //}
+ try
+ {
+ b1 = communicator.stringToProxy("test::" + defaultProtocol);
+ test(false);
+ }
+ catch(ex)
+ {
+ if(!(ex instanceof Ice.EndpointParseException))
+ {
+ test(false);
+ }
+ }
+ out.writeLine("ok");
+
+ out.write("testing propertyToProxy... ");
+ var prop = communicator.getProperties();
+ var propertyPrefix = "Foo.Proxy";
+ prop.setProperty(propertyPrefix, "test:default -p 12010");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getIdentity().name === "test" && b1.ice_getIdentity().category.length === 0 &&
+ b1.ice_getAdapterId().length === 0 && b1.ice_getFacet().length === 0);
+
+ var property;
+
+ property = propertyPrefix + ".Locator";
+ test(b1.ice_getLocator() === null);
+ prop.setProperty(property, "locator:default -p 10000");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getLocator() !== null && b1.ice_getLocator().ice_getIdentity().name === "locator");
+ prop.setProperty(property, "");
+
+ property = propertyPrefix + ".LocatorCacheTimeout";
+ test(b1.ice_getLocatorCacheTimeout() === -1);
+ prop.setProperty(property, "1");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getLocatorCacheTimeout() === 1);
+ prop.setProperty(property, "");
+
+ // Now retest with an indirect proxy.
+ prop.setProperty(propertyPrefix, "test");
+ property = propertyPrefix + ".Locator";
+ prop.setProperty(property, "locator:default -p 10000");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getLocator() !== null && b1.ice_getLocator().ice_getIdentity().name === "locator");
+ prop.setProperty(property, "");
+
+ property = propertyPrefix + ".LocatorCacheTimeout";
+ test(b1.ice_getLocatorCacheTimeout() === -1);
+ prop.setProperty(property, "1");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getLocatorCacheTimeout() === 1);
+ prop.setProperty(property, "");
+
+ // This cannot be tested so easily because the property is cached
+ // on communicator initialization.
+ //
+ //prop.setProperty("Ice.Default.LocatorCacheTimeout", "60");
+ //b1 = communicator.propertyToProxy(propertyPrefix);
+ //test(b1.ice_getLocatorCacheTimeout() === 60);
+ //prop.setProperty("Ice.Default.LocatorCacheTimeout", "");
+
+ prop.setProperty(propertyPrefix, "test:default -p 12010");
+
+ property = propertyPrefix + ".Router";
+ test(b1.ice_getRouter() === null);
+ prop.setProperty(property, "router:default -p 10000");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getRouter() !== null && b1.ice_getRouter().ice_getIdentity().name === "router");
+ prop.setProperty(property, "");
+
+ property = propertyPrefix + ".PreferSecure";
+ test(!b1.ice_isPreferSecure());
+ prop.setProperty(property, "1");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_isPreferSecure());
+ prop.setProperty(property, "");
+
+ property = propertyPrefix + ".ConnectionCached";
+ test(b1.ice_isConnectionCached());
+ prop.setProperty(property, "0");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(!b1.ice_isConnectionCached());
+ prop.setProperty(property, "");
+
+ property = propertyPrefix + ".EndpointSelection";
+ test(b1.ice_getEndpointSelection() === Ice.EndpointSelectionType.Random);
+ prop.setProperty(property, "Random");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getEndpointSelection() === Ice.EndpointSelectionType.Random);
+ prop.setProperty(property, "Ordered");
+ b1 = communicator.propertyToProxy(propertyPrefix);
+ test(b1.ice_getEndpointSelection() === Ice.EndpointSelectionType.Ordered);
+ prop.setProperty(property, "");
+
+ out.writeLine("ok");
+
+ out.write("testing proxyToProperty... ");
+
+ b1 = communicator.stringToProxy("test");
+ b1 = b1.ice_connectionCached(true);
+ b1 = b1.ice_preferSecure(false);
+ b1 = b1.ice_endpointSelection(Ice.EndpointSelectionType.Ordered);
+ b1 = b1.ice_locatorCacheTimeout(100);
+ b1 = b1.ice_encodingVersion(new Ice.EncodingVersion(1, 0));
+
+ var router = communicator.stringToProxy("router");
+ router = router.ice_connectionCached(true);
+ router = router.ice_preferSecure(true);
+ router = router.ice_endpointSelection(Ice.EndpointSelectionType.Random);
+ router = router.ice_locatorCacheTimeout(200);
+
+ var locator = communicator.stringToProxy("locator");
+ locator = locator.ice_connectionCached(false);
+ locator = locator.ice_preferSecure(true);
+ locator = locator.ice_endpointSelection(Ice.EndpointSelectionType.Random);
+ locator = locator.ice_locatorCacheTimeout(300);
+
+ locator = locator.ice_router(Ice.RouterPrx.uncheckedCast(router));
+ b1 = b1.ice_locator(Ice.LocatorPrx.uncheckedCast(locator));
+
+ var proxyProps = communicator.proxyToProperty(b1, "Test");
+ test(proxyProps.size === 18);
+
+ test(proxyProps.get("Test") === "test -t -e 1.0");
+ test(proxyProps.get("Test.CollocationOptimized") === "0");
+ test(proxyProps.get("Test.ConnectionCached") === "1");
+ test(proxyProps.get("Test.PreferSecure") === "0");
+ test(proxyProps.get("Test.EndpointSelection") === "Ordered");
+ test(proxyProps.get("Test.LocatorCacheTimeout") === "100");
+
+ test(proxyProps.get("Test.Locator") === "locator -t -e " +
+ Ice.encodingVersionToString(Ice.currentEncoding()));
+ test(proxyProps.get("Test.Locator.CollocationOptimized") === "0");
+ test(proxyProps.get("Test.Locator.ConnectionCached") === "0");
+ test(proxyProps.get("Test.Locator.PreferSecure") === "1");
+ test(proxyProps.get("Test.Locator.EndpointSelection") === "Random");
+ test(proxyProps.get("Test.Locator.LocatorCacheTimeout") === "300");
+
+ test(proxyProps.get("Test.Locator.Router") === "router -t -e " +
+ Ice.encodingVersionToString(Ice.currentEncoding()));
+ test(proxyProps.get("Test.Locator.Router.CollocationOptimized") === "0");
+ test(proxyProps.get("Test.Locator.Router.ConnectionCached") === "1");
+ test(proxyProps.get("Test.Locator.Router.PreferSecure") === "1");
+ test(proxyProps.get("Test.Locator.Router.EndpointSelection") === "Random");
+ test(proxyProps.get("Test.Locator.Router.LocatorCacheTimeout") === "200");
+
+ out.writeLine("ok");
+
+ out.write("testing ice_getCommunicator... ");
+ test(base.ice_getCommunicator() === communicator);
+ out.writeLine("ok");
+
+ out.write("testing proxy methods... ");
+ test(communicator.identityToString(
+ base.ice_identity(communicator.stringToIdentity("other")).ice_getIdentity()) === "other");
+ test(base.ice_facet("facet").ice_getFacet() === "facet");
+ test(base.ice_adapterId("id").ice_getAdapterId() === "id");
+ test(base.ice_twoway().ice_isTwoway());
+ test(base.ice_oneway().ice_isOneway());
+ test(base.ice_batchOneway().ice_isBatchOneway());
+ test(base.ice_datagram().ice_isDatagram());
+ test(base.ice_batchDatagram().ice_isBatchDatagram());
+ test(base.ice_secure(true).ice_isSecure());
+ test(!base.ice_secure(false).ice_isSecure());
+ test(base.ice_preferSecure(true).ice_isPreferSecure());
+ test(!base.ice_preferSecure(false).ice_isPreferSecure());
+ test(base.ice_encodingVersion(Ice.Encoding_1_0).ice_getEncodingVersion().equals(Ice.Encoding_1_0));
+ test(base.ice_encodingVersion(Ice.Encoding_1_1).ice_getEncodingVersion().equals(Ice.Encoding_1_1));
+ test(!base.ice_encodingVersion(Ice.Encoding_1_0).ice_getEncodingVersion().equals(Ice.Encoding_1_1));
+ out.writeLine("ok");
+
+ out.write("testing proxy comparison... ");
+
+ test(communicator.stringToProxy("foo").equals(communicator.stringToProxy("foo")));
+ test(!communicator.stringToProxy("foo").equals(communicator.stringToProxy("foo2")));
+
+ var compObj = communicator.stringToProxy("foo");
+
+ test(compObj.ice_facet("facet").equals(compObj.ice_facet("facet")));
+ test(!compObj.ice_facet("facet").equals(compObj.ice_facet("facet1")));
+
+ test(compObj.ice_oneway().equals(compObj.ice_oneway()));
+ test(!compObj.ice_oneway().equals(compObj.ice_twoway()));
+
+ test(compObj.ice_secure(true).equals(compObj.ice_secure(true)));
+ test(!compObj.ice_secure(false).equals(compObj.ice_secure(true)));
+
+ test(compObj.ice_connectionCached(true).equals(compObj.ice_connectionCached(true)));
+ test(!compObj.ice_connectionCached(false).equals(compObj.ice_connectionCached(true)));
+
+ test(compObj.ice_endpointSelection(Ice.EndpointSelectionType.Random).equals(
+ compObj.ice_endpointSelection(Ice.EndpointSelectionType.Random)));
+ test(!compObj.ice_endpointSelection(Ice.EndpointSelectionType.Random).equals(
+ compObj.ice_endpointSelection(Ice.EndpointSelectionType.Ordered)));
+
+ test(compObj.ice_connectionId("id2").equals(compObj.ice_connectionId("id2")));
+ test(!compObj.ice_connectionId("id1").equals(compObj.ice_connectionId("id2")));
+
+ test(compObj.ice_connectionId("id1").ice_getConnectionId() === "id1");
+ test(compObj.ice_connectionId("id2").ice_getConnectionId() === "id2");
+
+ test(compObj.ice_compress(true).equals(compObj.ice_compress(true)));
+ test(!compObj.ice_compress(false).equals(compObj.ice_compress(true)));
+
+ test(compObj.ice_timeout(20).equals(compObj.ice_timeout(20)));
+ test(!compObj.ice_timeout(10).equals(compObj.ice_timeout(20)));
+
+ var loc1 = Ice.LocatorPrx.uncheckedCast(communicator.stringToProxy("loc1:default -p 10000"));
+ var loc2 = Ice.LocatorPrx.uncheckedCast(communicator.stringToProxy("loc2:default -p 10000"));
+ test(compObj.ice_locator(null).equals(compObj.ice_locator(null)));
+ test(compObj.ice_locator(loc1).equals(compObj.ice_locator(loc1)));
+ test(!compObj.ice_locator(loc1).equals(compObj.ice_locator(null)));
+ test(!compObj.ice_locator(null).equals(compObj.ice_locator(loc2)));
+ test(!compObj.ice_locator(loc1).equals(compObj.ice_locator(loc2)));
+
+ var rtr1 = Ice.RouterPrx.uncheckedCast(communicator.stringToProxy("rtr1:default -p 10000"));
+ var rtr2 = Ice.RouterPrx.uncheckedCast(communicator.stringToProxy("rtr2:default -p 10000"));
+ test(compObj.ice_router(null).equals(compObj.ice_router(null)));
+ test(compObj.ice_router(rtr1).equals(compObj.ice_router(rtr1)));
+ test(!compObj.ice_router(rtr1).equals(compObj.ice_router(null)));
+ test(!compObj.ice_router(null).equals(compObj.ice_router(rtr2)));
+ test(!compObj.ice_router(rtr1).equals(compObj.ice_router(rtr2)));
+
+ var ctx1 = new Ice.HashMap();
+ ctx1.set("ctx1", "v1");
+ var ctx2 = new Ice.HashMap();
+ ctx2.set("ctx2", "v2");
+ test(compObj.ice_context(null).equals(compObj.ice_context(null)));
+ test(compObj.ice_context(ctx1).equals(compObj.ice_context(ctx1)));
+ test(!compObj.ice_context(ctx1).equals(compObj.ice_context(null)));
+ test(!compObj.ice_context(null).equals(compObj.ice_context(ctx2)));
+ test(!compObj.ice_context(ctx1).equals(compObj.ice_context(ctx2)));
+
+ test(compObj.ice_preferSecure(true).equals(compObj.ice_preferSecure(true)));
+ test(!compObj.ice_preferSecure(true).equals(compObj.ice_preferSecure(false)));
+
+ var compObj1 = communicator.stringToProxy("foo:" + defaultProtocol + " -h 127.0.0.1 -p 10000");
+ var compObj2 = communicator.stringToProxy("foo:" + defaultProtocol + " -h 127.0.0.1 -p 10001");
+ test(!compObj1.equals(compObj2));
+
+ compObj1 = communicator.stringToProxy("foo@MyAdapter1");
+ compObj2 = communicator.stringToProxy("foo@MyAdapter2");
+ test(!compObj1.equals(compObj2));
+
+ test(compObj1.ice_locatorCacheTimeout(20).equals(compObj1.ice_locatorCacheTimeout(20)));
+ test(!compObj1.ice_locatorCacheTimeout(10).equals(compObj1.ice_locatorCacheTimeout(20)));
+
+ compObj1 = communicator.stringToProxy("foo:" + defaultProtocol + " -h 127.0.0.1 -p 1000");
+ compObj2 = communicator.stringToProxy("foo@MyAdapter1");
+ test(!compObj1.equals(compObj2));
+
+ var endpts1 = communicator.stringToProxy("foo:" + defaultProtocol + " -h 127.0.0.1 -p 10000").ice_getEndpoints();
+ var endpts2 = communicator.stringToProxy("foo:" + defaultProtocol + " -h 127.0.0.1 -p 10001").ice_getEndpoints();
+ test(!endpts1[0].equals(endpts2[0]));
+ test(endpts1[0].equals(communicator.stringToProxy("foo:" + defaultProtocol + " -h 127.0.0.1 -p 10000").ice_getEndpoints()[0]));
+
+ test(compObj1.ice_encodingVersion(Ice.Encoding_1_0).equals(compObj1.ice_encodingVersion(Ice.Encoding_1_0)));
+ test(!compObj1.ice_encodingVersion(Ice.Encoding_1_0).equals(compObj1.ice_encodingVersion(Ice.Encoding_1_1)));
+
+ //
+ // TODO: Ideally we should also test comparison of fixed proxies.
+ //
+ out.writeLine("ok");
+
+ out.write("testing checked cast... ");
+ return Test.MyClassPrx.checkedCast(base);
+ }
+ ).then(
+ function(prx)
+ {
+ cl = prx;
+ test(cl !== null);
+ return Test.MyDerivedClassPrx.checkedCast(cl);
+ }
+ ).then(
+ function(prx)
+ {
+ derived = prx;
+ test(derived !== null);
+ test(cl.equals(base));
+ test(derived.equals(base));
+ test(cl.equals(derived));
+ out.writeLine("ok");
+ out.write("testing checked cast with context... ");
+
+ return cl.getContext();
+ }
+ ).then(
+ function(c)
+ {
+ test(c.size === 0);
+ c = new Ice.HashMap();
+ c.set("one", "hello");
+ c.set("two", "world");
+ return Test.MyClassPrx.checkedCast(base, undefined, c).then(
+ function(cl)
+ {
+ return cl.getContext();
+ }
+ ).then(
+ function(c2)
+ {
+ test(c.equals(c2));
+ out.writeLine("ok");
+
+ out.write("testing encoding versioning... ");
+
+ var ref20 = "test -e 2.0:default -p 12010";
+ cl20 = Test.MyClassPrx.uncheckedCast(communicator.stringToProxy(ref20));
+ return cl20.ice_ping();
+ });
+ }
+ ).then(
+ function()
+ {
+ test(false);
+ },
+ function(ex)
+ {
+ test(ex instanceof Ice.UnsupportedEncodingException);
+ var ref10 = "test -e 1.0:default -p 12010";
+ cl10 = Test.MyClassPrx.uncheckedCast(communicator.stringToProxy(ref10));
+ return cl10.ice_ping();
+ }
+ ).then(
+ function()
+ {
+ return cl10.ice_encodingVersion(Ice.Encoding_1_0).ice_ping();
+ }
+ ).then(
+ function()
+ {
+ // 1.3 isn't supported but since a 1.3 proxy supports 1.1, the
+ // call will use the 1.1 encoding
+ var ref13 = "test -e 1.3:default -p 12010";
+ var cl13 = Test.MyClassPrx.uncheckedCast(communicator.stringToProxy(ref13));
+
+ // TODO: Port ice_invoke tests?
+
+ out.writeLine("ok");
+
+ out.write("testing protocol versioning... ");
+
+ var ref20 = "test -p 2.0:default -p 12010";
+ cl20 = Test.MyClassPrx.uncheckedCast(communicator.stringToProxy(ref20));
+ return cl20.ice_ping();
+ }
+ ).then(
+ function()
+ {
+ test(false);
+ },
+ function(ex)
+ {
+ test(ex instanceof Ice.UnsupportedProtocolException);
+ var ref10 = "test -p 1.0:default -p 12010";
+ cl10 = Test.MyClassPrx.uncheckedCast(communicator.stringToProxy(ref10));
+ return cl10.ice_ping();
+ }
+ ).then(
+ function()
+ {
+ // 1.3 isn't supported but since a 1.3 proxy supports 1.1, the
+ // call will use the 1.1 encoding
+ var ref13 = "test -p 1.3:default -p 12010";
+ cl13 = Test.MyClassPrx.uncheckedCast(communicator.stringToProxy(ref13));
+ return cl13.ice_ping();
+ }
+ ).then(
+ function()
+ {
+ out.writeLine("ok");
+
+ out.write("testing opaque endpoints... ");
+
+ try
+ {
+ // Invalid -x option
+ communicator.stringToProxy("id:opaque -t 99 -v abc -x abc");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Missing -t and -v
+ communicator.stringToProxy("id:opaque");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Repeated -t
+ communicator.stringToProxy("id:opaque -t 1 -t 1 -v abc");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Repeated -v
+ communicator.stringToProxy("id:opaque -t 1 -v abc -v abc");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Missing -t
+ communicator.stringToProxy("id:opaque -v abc");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Missing -v
+ communicator.stringToProxy("id:opaque -t 1");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Missing arg for -t
+ communicator.stringToProxy("id:opaque -t -v abc");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Missing arg for -v
+ communicator.stringToProxy("id:opaque -t 1 -v");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Not a number for -t
+ communicator.stringToProxy("id:opaque -t x -v abc");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // < 0 for -t
+ communicator.stringToProxy("id:opaque -t -1 -v abc");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ try
+ {
+ // Invalid char for -v
+ communicator.stringToProxy("id:opaque -t 99 -v x?c");
+ test(false);
+ }
+ catch(ex)
+ {
+ test(ex instanceof Ice.EndpointParseException);
+ }
+
+ var p1, pstr;
+ if(defaultProtocol == "tcp")
+ {
+ // Legal TCP endpoint expressed as opaque endpoint
+ p1 = communicator.stringToProxy("test -e 1.1:opaque -e 1.0 -t 1 -v CTEyNy4wLjAuMeouAAAQJwAAAA==");
+ pstr = communicator.proxyToString(p1);
+ test(pstr === "test -t -e 1.1:tcp -h 127.0.0.1 -p 12010 -t 10000");
+ }
+ else
+ {
+ // Legal WS endpoint expressed as opaque endpoint
+ p1 = communicator.stringToProxy("test -e 1.1:opaque -t 4 -e 1.0 -v CTEyNy4wLjAuMeouAAAQJwAAAAA=");
+ pstr = communicator.proxyToString(p1);
+ test(pstr === "test -t -e 1.1:ws -h 127.0.0.1 -p 12010 -t 10000");
+ }
+
+ var p2;
+ // Opaque endpoint encoded with 1.1 encoding.
+ if(defaultProtocol == "tcp")
+ {
+ p2 = communicator.stringToProxy("test:opaque -e 1.1 -t 1 -v CTEyNy4wLjAuMeouAAAQJwAAAA==");
+ test(communicator.proxyToString(p2) === "test -t -e 1.1:tcp -h 127.0.0.1 -p 12010 -t 10000");
+ }
+ else
+ {
+ p2 = communicator.stringToProxy("test:opaque -e 1.1 -t 4 -v CTEyNy4wLjAuMeouAAAQJwAAAAA==");
+ test(communicator.proxyToString(p2) === "test -t -e 1.1:ws -h 127.0.0.1 -p 12010 -t 10000");
+ }
+
+ if(communicator.getProperties().getPropertyAsInt("Ice.IPv6") === 0)
+ {
+ var ref = "test:default -p 12010";
+ var base = communicator.stringToProxy(ref);
+
+ var ssl = communicator.getProperties().getProperty("Ice.Default.Protocol") === "ssl";
+ /* TODO: p1 contains 127.0.0.1 - OK to invoke?
+ if(!ssl)
+ {
+ p1.ice_encodingVersion(Ice.Util.Encoding_1_0).ice_ping();
+ }
+ */
+
+ // Two legal TCP endpoints expressed as opaque endpoints
+ if(defaultProtocol == "tcp")
+ {
+ p1 = communicator.stringToProxy("test -e 1.0:opaque -e 1.0 -t 1 -v CTEyNy4wLjAuMeouAAAQJwAAAA==:opaque -e 1.0 -t 1 -v CTEyNy4wLjAuMusuAAAQJwAAAA==");
+ pstr = communicator.proxyToString(p1);
+ test(pstr === "test -t -e 1.0:tcp -h 127.0.0.1 -p 12010 -t 10000:tcp -h 127.0.0.2 -p 12011 -t 10000");
+ }
+ else
+ {
+ p1 = communicator.stringToProxy("test -e 1.0:opaque -t 4 -e 1.0 -v CTEyNy4wLjAuMeouAAAQJwAAAAA=:opaque -t 4 -e 1.0 -v CTEyNy4wLjAuMusuAAAQJwAAAAA=");
+ pstr = communicator.proxyToString(p1);
+ test(pstr === "test -t -e 1.0:ws -h 127.0.0.1 -p 12010 -t 10000:ws -h 127.0.0.2 -p 12011 -t 10000");
+ }
+
+ //
+ // Test that an SSL endpoint and a nonsense endpoint get
+ // written back out as an opaque endpoint.
+ //
+ p1 = communicator.stringToProxy("test -e 1.0:opaque -e 1.0 -t 2 -v CTEyNy4wLjAuMREnAAD/////AA==:opaque -t 99 -e 1.0 -v abch");
+ pstr = communicator.proxyToString(p1);
+ if(!ssl)
+ {
+ test(pstr === "test -t -e 1.0:opaque -t 2 -e 1.0 -v CTEyNy4wLjAuMREnAAD/////AA==:opaque -t 99 -e 1.0 -v abch");
+ }
+ else
+ {
+ test(pstr === "test -t -e 1.0:ssl -h 127.0.0.1 -p 10001:opaque -t 99 -e 1.0 -v abch");
+ }
+
+ //
+ // Try to invoke on the SSL endpoint to verify that we get a
+ // NoEndpointException (or ConnectFailedException when
+ // running with SSL).
+ //
+ return p1.ice_encodingVersion(Ice.Encoding_1_0).ice_ping().then(
+ function(r)
+ {
+ test(false);
+ }
+ ).exception(
+ function(ex)
+ {
+ if(ex instanceof Ice.NoEndpointException)
+ {
+ test(!ssl);
+ }
+ else if(ex instanceof Ice.ConnectFailedException)
+ {
+ test(ssl);
+ }
+ else
+ {
+ test(false);
+ }
+ return p1;
+ }
+ ).then(
+ function(p1)
+ {
+ //
+ // Test that the proxy with an SSL endpoint and a nonsense
+ // endpoint (which the server doesn't understand either) can
+ // be sent over the wire and returned by the server without
+ // losing the opaque endpoints.
+ //
+ var ref = "test -e 1.0:default -p 12010";
+ var base = communicator.stringToProxy(ref);
+ var derived = Test.MyDerivedClassPrx.uncheckedCast(base);
+ return derived.echo(p1);
+ }
+ ).then(
+ function(p2)
+ {
+ var pstr = communicator.proxyToString(p2);
+ if(!ssl)
+ {
+ test(pstr === "test -t -e 1.0:opaque -t 2 -e 1.0 -v CTEyNy4wLjAuMREnAAD/////AA==:opaque -t 99 -e 1.0 -v abch");
+ }
+ else
+ {
+ test(pstr === "test -t -e 1.0:ssl -h 127.0.0.1 -p 10001:opaque -t 99 -e 1.0 -v abch");
+ }
+ });
+ }
+ }
+ ).then(
+ function()
+ {
+ out.writeLine("ok");
+ var derived = Test.MyDerivedClassPrx.uncheckedCast(communicator.stringToProxy("test:default -p 12010"));
+ return derived.shutdown();
+ });
+ }
+
+ var run = function(out, id)
+ {
+ return Promise.try(
+ function()
+ {
+ var communicator = Ice.initialize(id);
+ return allTests(communicator, out).finally(
+ function()
+ {
+ communicator.destroy();
+ });
+
+ });
+ };
+ global.__test__ = run;
+ global.__runServer__ = true;
+}(typeof (global) === "undefined" ? window : global));
diff --git a/js/test/Ice/proxy/Makefile b/js/test/Ice/proxy/Makefile
new file mode 100644
index 00000000000..8f81ea44140
--- /dev/null
+++ b/js/test/Ice/proxy/Makefile
@@ -0,0 +1,23 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ../../..
+
+TARGETS = index.html
+
+SLICES = Test.ice
+
+GEN_SRCS = $(patsubst %.ice, %.js, $(SLICES))
+
+SRCS = Client.js
+
+include $(top_srcdir)/config/Make.rules.js
+
+SLICE2JSFLAGS := $(SLICE2JSFLAGS) -I$(slicedir)
+
diff --git a/js/test/Ice/proxy/Makefile.mak b/js/test/Ice/proxy/Makefile.mak
new file mode 100644
index 00000000000..61a62482429
--- /dev/null
+++ b/js/test/Ice/proxy/Makefile.mak
@@ -0,0 +1,20 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ..\..\..
+
+TARGETS = index.html
+
+GEN_SRCS = Test.js
+
+SRCS = Client.js
+
+!include $(top_srcdir)\config\Make.rules.mak.js
+
+SLICE2JSFLAGS = $(SLICE2JSFLAGS) -I"$(slicedir)"
diff --git a/js/test/Ice/proxy/Test.ice b/js/test/Ice/proxy/Test.ice
new file mode 100644
index 00000000000..02c9a71a505
--- /dev/null
+++ b/js/test/Ice/proxy/Test.ice
@@ -0,0 +1,29 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#pragma once
+
+#include <Ice/Current.ice>
+
+module Test
+{
+
+class MyClass
+{
+ void shutdown();
+
+ Ice::Context getContext();
+};
+
+class MyDerivedClass extends MyClass
+{
+ Object* echo(Object* obj);
+};
+
+};
diff --git a/js/test/Ice/proxy/run.js b/js/test/Ice/proxy/run.js
new file mode 100644
index 00000000000..a875f421701
--- /dev/null
+++ b/js/test/Ice/proxy/run.js
@@ -0,0 +1,10 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+require("../../Common/Common")(module);
diff --git a/js/test/Ice/proxy/run.py b/js/test/Ice/proxy/run.py
new file mode 100755
index 00000000000..d05cbcbf470
--- /dev/null
+++ b/js/test/Ice/proxy/run.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# **********************************************************************
+#
+# Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+import os, sys
+
+path = [ ".", "..", "../..", "../../..", "../../../.." ]
+head = os.path.dirname(sys.argv[0])
+if len(head) > 0:
+ path = [os.path.join(head, p) for p in path]
+path = [os.path.abspath(p) for p in path if os.path.exists(os.path.join(p, "scripts", "TestUtil.py")) ]
+if len(path) == 0:
+ raise RuntimeError("can't find toplevel directory!")
+sys.path.append(os.path.join(path[0], "scripts"))
+import TestUtil
+
+print("tests with regular server.")
+TestUtil.clientServerTest()
+print("tests with AMD server.")
+TestUtil.clientServerTest(server="serveramd") \ No newline at end of file