@Test
  public void addSimple() throws Exception {
    File cfg = tmp.newFile("xmlTransform.xml");
    Files.write(SUBSYSTEM_EMPTY, cfg, Charsets.UTF_8);

    OfflineManagementClient client =
        ManagementClient.offline(OfflineOptions.standalone().configurationFile(cfg).build());

    AddSecurityDomain addSecurityDomain = new AddSecurityDomain.Builder("creaperSecDomain").build();

    assertXmlIdentical(SUBSYSTEM_EMPTY, Files.toString(cfg, Charsets.UTF_8));
    client.apply(addSecurityDomain);
    assertXmlIdentical(SUBSYSTEM_SIMPLE, Files.toString(cfg, Charsets.UTF_8));
  }
  @Test(expected = CommandFailedException.class)
  public void existing() throws Exception {
    File cfg = tmp.newFile("xmlTransform.xml");
    Files.write(SUBSYSTEM_SIMPLE, cfg, Charsets.UTF_8);

    OfflineManagementClient client =
        ManagementClient.offline(OfflineOptions.standalone().configurationFile(cfg).build());

    AddSecurityDomain addSecurityDomain = new AddSecurityDomain.Builder("creaperSecDomain").build();

    assertXmlIdentical(SUBSYSTEM_SIMPLE, Files.toString(cfg, Charsets.UTF_8));
    client.apply(addSecurityDomain);

    fail(
        "Security domain creaperSecDomain already exists in configuration, exception should be thrown");
  }
  @Test
  public void removeTcpHandler() throws Exception {
    File cfg = tmp.newFile("xmlTransform.xml");
    Files.write(TEST_TCP_SYSLOG_HANDLER, cfg, Charsets.UTF_8);

    OfflineManagementClient client =
        ManagementClient.offline(OfflineOptions.standalone().configurationFile(cfg).build());

    RemoveAuditLogSyslogHandler removeHandler =
        new RemoveAuditLogSyslogHandler("creaper-tcp-handler");

    assertXmlIdentical(TEST_TCP_SYSLOG_HANDLER, Files.toString(cfg, Charsets.UTF_8));

    client.apply(removeHandler);
    assertXmlIdentical(NO_HANDLERS, Files.toString(cfg, Charsets.UTF_8));
  }
  @Test(expected = CommandFailedException.class)
  public void removeNonExistingSyslogHandler() throws Exception {
    File cfg = tmp.newFile("xmlTransform.xml");
    Files.write(NO_HANDLERS, cfg, Charsets.UTF_8);

    OfflineManagementClient client =
        ManagementClient.offline(OfflineOptions.standalone().configurationFile(cfg).build());

    RemoveAuditLogSyslogHandler removeHandler =
        new RemoveAuditLogSyslogHandler("non-existing-syslog-handler");

    assertXmlIdentical(NO_HANDLERS, Files.toString(cfg, Charsets.UTF_8));

    client.apply(removeHandler);
    fail("Specified syslog handler does not exist in configuration, an exception should be thrown");
  }
  @Test
  public void overrideExisting() throws Exception {
    File cfg = tmp.newFile("xmlTransform.xml");
    Files.write(SUBSYSTEM_SIMPLE, cfg, Charsets.UTF_8);

    OfflineManagementClient client =
        ManagementClient.offline(OfflineOptions.standalone().configurationFile(cfg).build());

    AddSecurityDomain addSecurityDomain =
        new AddSecurityDomain.Builder("creaperSecDomain")
            .cacheType("default")
            .replaceExisting()
            .build();

    assertXmlIdentical(SUBSYSTEM_SIMPLE, Files.toString(cfg, Charsets.UTF_8));
    client.apply(addSecurityDomain);
    assertXmlIdentical(SUBSYSTEM_EXPECTED_REPLACE, Files.toString(cfg, Charsets.UTF_8));
  }
  @Test(expected = CommandFailedException.class)
  public void existing() throws Exception {
    File cfg = tmp.newFile("xmlTransform.xml");
    String subsystemXml =
        String.format(SUBSYTEM_ORIGINAL, "<datasource pool-name=\"creaper-ds\"/>");
    Files.write(subsystemXml, cfg, Charsets.UTF_8);

    OfflineManagementClient client =
        ManagementClient.offline(OfflineOptions.standalone().configurationFile(cfg).build());

    AddDataSource addDataSource =
        new AddDataSource.Builder("creaper-ds")
            .connectionUrl("jdbc:h2:mem:test-creaper;DB_CLOSE_DELAY=-1;")
            .jndiName("java:/jboss/datasources/creaper-ds")
            .driverName("h2")
            .usernameAndPassword("creaper", "creaper")
            .build();

    assertXmlIdentical(subsystemXml, Files.toString(cfg, Charsets.UTF_8));
    client.apply(addDataSource);
    fail("Datasource creaper-ds already exists in configuration, exception should be thrown");
  }
  @Test
  public void transform() throws Exception {
    File cfg = tmp.newFile("xmlTransform.xml");
    String subsystemXml = String.format(SUBSYTEM_ORIGINAL, "<datasource pool-name=\"eap-qe\"/>");
    Files.write(subsystemXml, cfg, Charsets.UTF_8);

    OfflineManagementClient client =
        ManagementClient.offline(OfflineOptions.standalone().configurationFile(cfg).build());

    AddDataSource addDataSource =
        new AddDataSource.Builder("creaper-ds")
            .connectionUrl("jdbc:h2:mem:test-creaper;DB_CLOSE_DELAY=-1;")
            .jndiName("java:/jboss/datasources/creaper-ds")
            .driverName("h2")
            .usernameAndPassword("creaper", "creaper")
            .allocationRetry(3)
            .allocationRetryWaitMillis(1000)
            .allowMultipleUsers(true)
            .backgroundValidation(true)
            .backgroundValidationMillis(1000)
            .blockingTimeoutWaitMillis(1000)
            .checkValidConnectionSql("SELECT 1")
            .connectable(true)
            .addConnectionProperty("other-user-name", "right-its-other-username")
            .datasourceClass("org.h2.jdbcx.JdbcDataSource")
            .driverClass("org.h2.Driver")
            .exceptionSorterClass(
                "org.jboss.jca.adapters.jdbc.extensions.novendor.NullExceptionSorter")
            .addExceptionSorterProperty("exception-sorter-prop", "ok")
            .idleTimeoutMinutes(10)
            .jta(true)
            .managedConnectionPool(
                "org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool")
            .maxPoolSize(1)
            .minPoolSize(1)
            .newConnectionSql("SELECT 1")
            .flushStrategy(PoolFlushStrategy.ENTIRE_POOL)
            .prefill(true)
            .preparedStatementsCacheSize(3)
            .queryTimeout(20)
            .setTxQueryTimeout(true)
            .sharePreparedStatements(true)
            .spy(true)
            .staleConnectionCheckerClass(
                "org.jboss.jca.adapters.jdbc.extensions.novendor.NullStaleConnectionChecker")
            .addStaleConnectionCheckerProperty("stale-checker-prop", "ok")
            .statisticsEnabled(true)
            .trackPreparedStatements(TrackStatementType.TRUE)
            .transactionIsolation(TransactionIsolation.TRANSACTION_REPEATABLE_READ)
            .urlDelimiter(";")
            .useCcm(true)
            .useFastFailAllocation(false)
            .useJavaContext(true)
            .useStrictMinPoolSize(true)
            .useTryLock(60)
            .validateOnMatch(true)
            .validConnectionCheckerClass(
                "org.jboss.jca.adapters.jdbc.extensions.novendor.NullValidConnectionChecker")
            .addValidConnectionCheckerProperty("valid-checker-prop", "ok")
            .build();

    assertXmlIdentical(subsystemXml, Files.toString(cfg, Charsets.UTF_8));
    client.apply(addDataSource);
    assertXmlIdentical(SUBSYTEM_EXPECTED, Files.toString(cfg, Charsets.UTF_8));
  }
 @Before
 public void connect() throws IOException {
   client = ManagementClient.online(OnlineOptions.standalone().localDefault().build());
   ops = new Operations(client);
   administration = new Administration(client);
 }