@Test
  public void testGatewayQueueWithOverflowNoPersistence() throws Exception {
    String gatewayHubName = "testGatewayQueueWithOverflowNoPersistence";

    GatewayProxy.GatewayQueue gatewayQueue = new GatewayProxy.GatewayQueue();

    gatewayQueue.setAlertThreshold(100);
    gatewayQueue.setBatchSize(250);
    gatewayQueue.setBatchTimeInterval(120000);
    gatewayQueue.setDiskStoreRef("diskZ");
    gatewayQueue.setEnableBatchConflation(true);
    gatewayQueue.setMaximumQueueMemory(2048);
    gatewayQueue.setPersistent(false);

    GatewayProxy gatewayProxy = new GatewayProxy();

    gatewayProxy.setId("gatewayProxyId");
    gatewayProxy.setConcurrencyLevel(2);
    gatewayProxy.setEndpoints(null);
    gatewayProxy.setListeners(null);
    gatewayProxy.setOrderPolicy(Gateway.OrderPolicy.THREAD);
    gatewayProxy.setQueue(gatewayQueue);
    gatewayProxy.setSocketBufferSize(4096);
    gatewayProxy.setSocketReadTimeout(60);

    GatewayHub mockGatewayHub =
        mock(GatewayHub.class, "testGatewayQueueWithOverflowNoPersistence.MockGatewayHub");

    Gateway mockGateway =
        mock(Gateway.class, "testGatewayQueueWithOverflowNoPersistence.MockGateway");

    GatewayQueueAttributes mockGatewayQueueAttributes =
        mock(
            GatewayQueueAttributes.class,
            "testGatewayQueueWithOverflowNoPersistence.MockGatewayQueueAttributes");

    when(mockCache.addGatewayHub(eq(gatewayHubName), eq(10224))).thenReturn(mockGatewayHub);
    when(mockCache.getGatewayHub(eq(gatewayHubName))).thenReturn(mockGatewayHub);
    when(mockGatewayHub.addGateway(
            eq(gatewayProxy.getId()), eq(gatewayProxy.getConcurrencyLevel())))
        .thenReturn(mockGateway);
    when(mockGatewayHub.getManualStart()).thenReturn(GatewayHub.DEFAULT_MANUAL_START);
    when(mockGateway.getQueueAttributes()).thenReturn(mockGatewayQueueAttributes);

    factoryBean.setGateways(Arrays.asList(gatewayProxy));
    factoryBean.setName(gatewayHubName);
    factoryBean.setPort(10224);
    factoryBean.afterPropertiesSet();

    verify(mockGatewayHub, times(1)).setBindAddress(eq(GatewayHub.DEFAULT_BIND_ADDRESS));
    verify(mockGatewayHub, times(1)).setManualStart(eq(GatewayHub.DEFAULT_MANUAL_START));
    verify(mockGatewayHub, times(1)).setMaxConnections(GatewayHub.DEFAULT_MAX_CONNECTIONS);
    verify(mockGatewayHub, times(1))
        .setMaximumTimeBetweenPings(eq(GatewayHub.DEFAULT_MAXIMUM_TIME_BETWEEN_PINGS));
    verify(mockGatewayHub, times(1)).setSocketBufferSize(eq(GatewayHub.DEFAULT_SOCKET_BUFFER_SIZE));
    verify(mockGatewayHub, times(1)).setStartupPolicy(eq(GatewayHub.DEFAULT_STARTUP_POLICY));
    verify(mockGatewayHub, times(1)).start();
    verify(mockGatewayHub, times(1))
        .addGateway(eq(gatewayProxy.getId()), eq(gatewayProxy.getConcurrencyLevel()));
    verify(mockGateway, times(1)).setOrderPolicy(eq(gatewayProxy.getOrderPolicy()));
    verify(mockGateway, times(1)).setSocketBufferSize(eq(gatewayProxy.getSocketBufferSize()));
    verify(mockGateway, times(1)).setSocketReadTimeout(eq(gatewayProxy.getSocketReadTimeout()));
    verify(mockGatewayQueueAttributes, times(1))
        .setAlertThreshold(gatewayQueue.getAlertThreshold());
    verify(mockGatewayQueueAttributes, times(1))
        .setBatchConflation(gatewayQueue.getEnableBatchConflation());
    verify(mockGatewayQueueAttributes, times(1)).setBatchSize(gatewayQueue.getBatchSize());
    verify(mockGatewayQueueAttributes, times(1))
        .setBatchTimeInterval(gatewayQueue.getBatchTimeInterval());
    verify(mockGatewayQueueAttributes, times(1)).setDiskStoreName(gatewayQueue.getDiskStoreRef());
    verify(mockGatewayQueueAttributes, times(1))
        .setMaximumQueueMemory(gatewayQueue.getMaximumQueueMemory());
    verify(mockGatewayQueueAttributes, times(1)).setEnablePersistence(gatewayQueue.getPersistent());
  }
  @Test
  public void testDoInit() throws Exception {
    String gatewayHubName = "testDoInit";

    GatewayProxy.GatewayEndpoint gatewayEndpointOne = new GatewayProxy.GatewayEndpoint();

    gatewayEndpointOne.setHost("localhost");
    gatewayEndpointOne.setId("123");
    gatewayEndpointOne.setPort(2121);

    GatewayProxy.GatewayEndpoint gatewayEndpointTwo = new GatewayProxy.GatewayEndpoint();

    gatewayEndpointOne.setHost("localhost");
    gatewayEndpointOne.setId("456");
    gatewayEndpointOne.setPort(4242);

    GatewayEventListener mockGatewayListener =
        mock(GatewayEventListener.class, "testDoInit.MockGatewayEventListener");

    GatewayProxy.GatewayQueue gatewayQueue = new GatewayProxy.GatewayQueue();

    gatewayQueue.setAlertThreshold(20);
    gatewayQueue.setBatchSize(100);
    gatewayQueue.setBatchTimeInterval(60000);
    gatewayQueue.setDiskStoreRef("diskX");
    gatewayQueue.setEnableBatchConflation(true);
    gatewayQueue.setMaximumQueueMemory(1024);
    gatewayQueue.setPersistent(true);

    GatewayProxy gatewayProxy = new GatewayProxy();

    gatewayProxy.setId("gatewayProxyId");
    gatewayProxy.setConcurrencyLevel(4);
    gatewayProxy.setEndpoints(Arrays.asList(gatewayEndpointOne, gatewayEndpointTwo));
    gatewayProxy.setListeners(Arrays.asList(mockGatewayListener));
    gatewayProxy.setOrderPolicy(Gateway.OrderPolicy.THREAD);
    gatewayProxy.setQueue(gatewayQueue);
    gatewayProxy.setSocketBufferSize(16384);
    gatewayProxy.setSocketReadTimeout(300);

    GatewayHub mockGatewayHub = mock(GatewayHub.class, "testDoInit.MockGatewayHub");

    Gateway mockGateway = mock(Gateway.class, "testDoInit.MockGateway");

    GatewayQueueAttributes mockGatewayQueueAttributes =
        mock(GatewayQueueAttributes.class, "testDoInit.MockGatewayQueueAttributes");

    when(mockCache.addGatewayHub(eq(gatewayHubName), eq(8484))).thenReturn(mockGatewayHub);
    when(mockCache.getGatewayHub(eq(gatewayHubName))).thenReturn(mockGatewayHub);
    when(mockGatewayHub.addGateway(
            eq(gatewayProxy.getId()), eq(gatewayProxy.getConcurrencyLevel().intValue())))
        .thenReturn(mockGateway);
    when(mockGatewayHub.getManualStart()).thenReturn(false);
    when(mockGateway.getQueueAttributes()).thenReturn(mockGatewayQueueAttributes);

    factoryBean.setBindAddress("10.124.210.42");
    factoryBean.setGateways(Arrays.asList(gatewayProxy));
    factoryBean.setManualStart(false);
    factoryBean.setMaxConnections(50);
    factoryBean.setMaximumTimeBetweenPings(20480);
    factoryBean.setName(gatewayHubName);
    factoryBean.setPort(8484);
    factoryBean.setSocketBufferSize(4096);
    factoryBean.setStartupPolicy(StartupPolicyType.PRIMARY);
    factoryBean.afterPropertiesSet();

    verify(mockGatewayHub, times(1)).setBindAddress(eq("10.124.210.42"));
    verify(mockGatewayHub, times(1)).setManualStart(eq(false));
    verify(mockGatewayHub, times(1)).setMaxConnections(eq(50));
    verify(mockGatewayHub, times(1)).setMaximumTimeBetweenPings(eq(20480));
    verify(mockGatewayHub, times(1)).setSocketBufferSize(eq(4096));
    verify(mockGatewayHub, times(1)).setStartupPolicy(eq(StartupPolicyType.PRIMARY.getName()));
    verify(mockGatewayHub, times(1))
        .addGateway(eq(gatewayProxy.getId()), eq(gatewayProxy.getConcurrencyLevel()));
    verify(mockGatewayHub, times(1)).start();
    verify(mockGateway, times(1))
        .addEndpoint(
            eq(gatewayEndpointOne.getId()),
            eq(gatewayEndpointOne.getHost()),
            eq(gatewayEndpointOne.getPort()));
    verify(mockGateway, times(1))
        .addEndpoint(
            eq(gatewayEndpointTwo.getId()),
            eq(gatewayEndpointTwo.getHost()),
            eq(gatewayEndpointTwo.getPort()));
    verify(mockGateway, times(1)).addListener(same(mockGatewayListener));
    verify(mockGateway, times(1)).setOrderPolicy(eq(gatewayProxy.getOrderPolicy()));
    verify(mockGateway, times(1)).setSocketBufferSize(eq(gatewayProxy.getSocketBufferSize()));
    verify(mockGateway, times(1)).setSocketReadTimeout(eq(gatewayProxy.getSocketReadTimeout()));
    verify(mockGateway, times(1)).getQueueAttributes();
    verify(mockGatewayQueueAttributes, times(1))
        .setAlertThreshold(eq(gatewayQueue.getAlertThreshold()));
    verify(mockGatewayQueueAttributes, times(1))
        .setBatchConflation(eq(gatewayQueue.getEnableBatchConflation()));
    verify(mockGatewayQueueAttributes, times(1)).setBatchSize(eq(gatewayQueue.getBatchSize()));
    verify(mockGatewayQueueAttributes, times(1))
        .setBatchTimeInterval(eq(gatewayQueue.getBatchTimeInterval()));
    verify(mockGatewayQueueAttributes, times(1))
        .setDiskStoreName(eq(gatewayQueue.getDiskStoreRef()));
    verify(mockGatewayQueueAttributes, times(1))
        .setMaximumQueueMemory(eq(gatewayQueue.getMaximumQueueMemory()));
    verify(mockGatewayQueueAttributes, times(1))
        .setEnablePersistence(eq(gatewayQueue.getPersistent()));
  }