@Test // KG-2250/KG-2251
  public void testWrongTruststoreType() throws Exception {
    boolean sawExpectedEx = false;

    String expectedLogMessage =
        "Exception .* caught loading file .*truststore-JCEKS.db.* you may need to specify "
            + "\"<type>JCEKS</type>\" in the gateway configuration file";
    String expected = "Invalid keystore format";
    LogMessageInspector inspector = LogMessageInspector.create(Gateway.class);

    try {
      configFile =
          createTempFileFromResource(
              "org/kaazing/gateway/server/config/parse/data/gateway-config-wrong-truststore"
                  + "-type.xml");
      GatewayConfigDocument doc = parser.parse(configFile);
      Assert.assertNotNull(doc);
      resolver.resolve(doc);

    } catch (IOException e) {
      if (e.getMessage().contains(expected)) {
        sawExpectedEx = true;
      }
      final List<LoggingEvent> grepResult =
          inspector.grep(org.apache.log4j.Level.ERROR, expectedLogMessage);
      Assert.assertEquals("Expected to find a matching error message", 1, grepResult.size());
    }

    Assert.assertTrue(
        String.format("Did not see expected IllegalArgumentException with message '%s'", expected),
        sawExpectedEx);
  }
  @Test
  public void testLowerCaseOfResolvedServices() throws Exception {
    configFile =
        createTempFileFromResource(
            "org/kaazing/gateway/server/context/parse/data/gateway-config-mixedcase.xml");
    GatewayConfigDocument doc = parser.parse(configFile);
    GatewayContext ctx = resolver.resolve(doc);

    Collection<? extends ServiceContext> services = ctx.getServices();
    for (ServiceContext service : services) {
      // validate that the accepts have lower-case host names
      Collection<String> acceptURIs = service.getAccepts();
      for (String acceptURI : acceptURIs) {
        Assert.assertTrue(
            URIUtils.getHost(acceptURI).equals(URIUtils.getHost(acceptURI).toLowerCase()));
      }

      // validate that the cross-site-constraints have lower-case host names
      Map<String, ? extends Map<String, ? extends CrossSiteConstraintContext>>
          crossSiteConstraints = service.getCrossSiteConstraints();
      for (String key : crossSiteConstraints.keySet()) {
        Map<String, ? extends CrossSiteConstraintContext> crossSiteConstraintsByURI =
            crossSiteConstraints.get(key);
        for (CrossSiteConstraintContext crossSiteConstraint : crossSiteConstraintsByURI.values()) {
          String allowOrigin = crossSiteConstraint.getAllowOrigin();
          if (!"*".equals(allowOrigin)) {
            URI originURI = URI.create(allowOrigin);
            Assert.assertTrue(originURI.getHost().equals(originURI.getHost().toLowerCase()));
          }
        }
      }
    }
  }
 // See http://jira.kaazing.wan/browse/KG-7237
 @Test(expected = RuntimeException.class)
 public void shouldNotResolveDuplicateRealms() throws Exception {
   configFile =
       createTempFileFromResource(
           "org/kaazing/gateway/server/context/parse/data/gateway-config-duplicate-realms.xml");
   GatewayConfigDocument doc = parser.parse(configFile);
   Assert.assertNotNull(doc);
   resolver.resolve(doc);
 }
 @Test // KG-5510
 public void shouldAcceptTrustStoreFileAbsolutePath() throws Exception {
   configFile =
       createTempFileFromResource(
           "org/kaazing/gateway/server/context/parse/data/gateway-config-abs-path-security"
               + "-files.xml",
           "keystore.db",
           "keystore.pw",
           trustStoreFile.getAbsolutePath());
   GatewayConfigDocument doc = parser.parse(configFile);
   Assert.assertNotNull(doc);
   resolver.resolve(doc);
 }
  // NOTE: this relies on org.kaazing.gateway.transport.ws.extension.WebSocketExtensionFactorySpi
  // and org.kaazing.gateway.transport.TransportFactorySpi in src/test/META-INF/services
  @Test
  public void shouldInjectResourcesIntoTransportExtensions() throws Exception {
    configFile = createTempFileFromResource("gateway/conf/gateway-config-test-transport.xml");
    GatewayConfigDocument doc = parser.parse(configFile);
    GatewayContext ctx = resolver.resolve(doc);

    DefaultTransportContext transport = ctx.getTransportForScheme("ws");
    TestAcceptor acceptor = (TestAcceptor) transport.getAcceptor();
    TestTransportExtension extension =
        (TestTransportExtension) acceptor.extensions.iterator().next();
    assertNotNull(extension.getTransportFactory());
    assertNotNull(extension.getResourceAddressFactory());
    assertTrue(extension.getTransportFactory() instanceof TransportFactory);
    assertTrue(extension.getResourceAddressFactory() instanceof ResourceAddressFactory);
  }