Пример #1
0
    public static void allTests(Ice.Communicator communicator)
    {
        Write("testing stringToProxy... ");
        Flush();
        String @ref = "hold:default -p 12010";

        Ice.ObjectPrx @base = communicator.stringToProxy(@ref);
        test(@base != null);
        String refSerialized = "hold:default -p 12011";

        Ice.ObjectPrx baseSerialized = communicator.stringToProxy(refSerialized);
        test(baseSerialized != null);
        WriteLine("ok");

        Write("testing checked cast... ");
        Flush();
        HoldPrx hold       = HoldPrxHelper.checkedCast(@base);
        HoldPrx holdOneway = HoldPrxHelper.uncheckedCast(@base.ice_oneway());

        test(hold != null);
        test(hold.Equals(@base));
        HoldPrx holdSerialized       = HoldPrxHelper.checkedCast(baseSerialized);
        HoldPrx holdSerializedOneway = HoldPrxHelper.uncheckedCast(baseSerialized.ice_oneway());

        test(holdSerialized != null);
        test(holdSerialized.Equals(baseSerialized));
        WriteLine("ok");

        Write("changing state between active and hold rapidly... ");
        Flush();
        for (int i = 0; i < 100; ++i)
        {
            hold.putOnHold(0);
        }
        for (int i = 0; i < 100; ++i)
        {
            holdOneway.putOnHold(0);
        }
        for (int i = 0; i < 100; ++i)
        {
            holdSerialized.putOnHold(0);
        }
        for (int i = 0; i < 100; ++i)
        {
            holdSerializedOneway.putOnHold(0);
        }
        WriteLine("ok");

        Write("testing without serialize mode... ");
        Flush();
        System.Random rand = new System.Random();
        {
            Condition       cond   = new Condition(true);
            int             value  = 0;
            Ice.AsyncResult result = null;
            while (cond.value())
            {
                SetCB cb = new SetCB(cond, value);
                result = hold.begin_set(++value, value < 500 ? rand.Next(5) : 0).whenCompleted(cb.response,
                                                                                               cb.exception);
                if (value % 100 == 0)
                {
                    result.waitForSent();
                }

                if (value > 100000)
                {
                    // Don't continue, it's possible that out-of-order dispatch doesn't occur
                    // after 100000 iterations and we don't want the test to last for too long
                    // when this occurs.
                    break;
                }
            }
            test(value > 100000 || !cond.value());
            result.waitForSent();
        }
        WriteLine("ok");

        Write("testing with serialize mode... ");
        Flush();
        {
            Condition       cond   = new Condition(true);
            int             value  = 0;
            Ice.AsyncResult result = null;
            while (value < 3000 && cond.value())
            {
                SetCB cb = new SetCB(cond, value);
                result = holdSerialized.begin_set(++value, 0).whenCompleted(cb.response, cb.exception);
                if (value % 100 == 0)
                {
                    result.waitForSent();
                }
            }
            result.waitForCompleted();
            test(cond.value());

            for (int i = 0; i < 10000; ++i)
            {
                holdSerializedOneway.setOneway(value + 1, value);
                ++value;
                if ((i % 100) == 0)
                {
                    holdSerializedOneway.putOnHold(1);
                }
            }
        }
        WriteLine("ok");

        Write("testing serialization... ");
        Flush();
        {
            int value = 0;
            holdSerialized.set(value, 0);
            Ice.AsyncResult result = null;
            for (int i = 0; i < 10000; ++i)
            {
                // Create a new proxy for each request
                result = ((HoldPrx)holdSerialized.ice_oneway()).begin_setOneway(value + 1, value);
                ++value;
                if ((i % 100) == 0)
                {
                    result.waitForSent();
                    holdSerialized.ice_ping(); // Ensure everything's dispatched.
                    holdSerialized.ice_getConnection().close(false);
                }
            }
            result.waitForCompleted();
        }
        WriteLine("ok");

        Write("testing waitForHold... ");
        Flush();
        {
            hold.waitForHold();
            hold.waitForHold();
            for (int i = 0; i < 1000; ++i)
            {
                holdOneway.ice_ping();
                if ((i % 20) == 0)
                {
                    hold.putOnHold(0);
                }
            }
            hold.putOnHold(-1);
            hold.ice_ping();
            hold.putOnHold(-1);
            hold.ice_ping();
        }
        WriteLine("ok");

        Write("changing state to hold and shutting down server... ");
        Flush();
        hold.shutdown();
        WriteLine("ok");
    }