org.apache.nifi.toolkit.s2s.SiteToSiteCliMainTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.nifi.toolkit.s2s.SiteToSiteCliMainTest.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.nifi.toolkit.s2s;

import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.nifi.remote.TransferDirection;
import org.apache.nifi.remote.client.KeystoreType;
import org.apache.nifi.remote.client.SiteToSiteClient;
import org.apache.nifi.remote.client.SiteToSiteClientConfig;
import org.apache.nifi.remote.protocol.SiteToSiteTransportProtocol;
import org.apache.nifi.remote.protocol.http.HttpProxy;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

public class SiteToSiteCliMainTest {
    private String expectedUrl;
    private TransferDirection expectedTransferDirection;
    private SiteToSiteTransportProtocol expectedSiteToSiteTransportProtocol;
    private String expectedPortName;
    private String expectedPortIdentifier;
    private long expectedTimeoutNs;
    private long expectedPenalizationNs;
    private String expectedKeystoreFilename;
    private String expectedKeystorePass;
    private KeystoreType expectedKeystoreType;
    private String expectedTruststoreFilename;
    private String expectedTruststorePass;
    private KeystoreType expectedTruststoreType;
    private boolean expectedCompression;
    private File expectedPeerPersistenceFile;
    private int expectedBatchCount;
    private long expectedBatchDuration;
    private long expectedBatchSize;
    private HttpProxy expectedHttpProxy;

    @Before
    public void setup() {
        SiteToSiteClient.Builder builder = new SiteToSiteClient.Builder();
        expectedUrl = SiteToSiteCliMain.URL_OPTION_DEFAULT;
        expectedTransferDirection = TransferDirection.valueOf(SiteToSiteCliMain.DIRECTION_OPTION_DEFAULT);
        expectedSiteToSiteTransportProtocol = SiteToSiteTransportProtocol
                .valueOf(SiteToSiteCliMain.TRANSPORT_PROTOCOL_OPTION_DEFAULT);
        expectedPortName = builder.getPortName();
        expectedPortIdentifier = builder.getPortIdentifier();
        expectedTimeoutNs = builder.getTimeout(TimeUnit.NANOSECONDS);
        expectedPenalizationNs = builder.getPenalizationPeriod(TimeUnit.NANOSECONDS);
        expectedKeystoreFilename = builder.getKeystoreFilename();
        expectedKeystorePass = builder.getKeystorePass();
        expectedKeystoreType = builder.getKeystoreType();
        expectedTruststoreFilename = builder.getTruststoreFilename();
        expectedTruststorePass = builder.getTruststorePass();
        expectedTruststoreType = builder.getTruststoreType();
        expectedCompression = false;
        expectedPeerPersistenceFile = builder.getPeerPersistenceFile();
        SiteToSiteClientConfig siteToSiteClientConfig = builder.buildConfig();
        expectedBatchCount = siteToSiteClientConfig.getPreferredBatchCount();
        expectedBatchDuration = siteToSiteClientConfig.getPreferredBatchDuration(TimeUnit.NANOSECONDS);
        expectedBatchSize = siteToSiteClientConfig.getPreferredBatchSize();
        expectedHttpProxy = siteToSiteClientConfig.getHttpProxy();
    }

    @Test
    public void testParseNoArgs() throws ParseException {
        parseAndCheckExpected(new String[0]);
    }

    @Test
    public void testParseUrl() throws ParseException {
        expectedUrl = "http://fake.url:8080/nifi";
        parseAndCheckExpected("u", SiteToSiteCliMain.URL_OPTION, expectedUrl);
    }

    @Test
    public void testParsePortName() throws ParseException {
        expectedPortName = "testPortName";
        parseAndCheckExpected("n", SiteToSiteCliMain.PORT_NAME_OPTION, expectedPortName);
    }

    @Test
    public void testParsePortIdentifier() throws ParseException {
        expectedPortIdentifier = "testPortId";
        parseAndCheckExpected("i", SiteToSiteCliMain.PORT_IDENTIFIER_OPTION, expectedPortIdentifier);
    }

    @Test
    public void testParseTimeout() throws ParseException {
        expectedTimeoutNs = TimeUnit.DAYS.toNanos(3);
        parseAndCheckExpected(null, SiteToSiteCliMain.TIMEOUT_OPTION, "3 days");
    }

    @Test
    public void testParsePenalization() throws ParseException {
        expectedPenalizationNs = TimeUnit.HOURS.toNanos(4);
        parseAndCheckExpected(null, SiteToSiteCliMain.PENALIZATION_OPTION, "4 hours");
    }

    @Test
    public void testParseKeystore() throws ParseException {
        expectedKeystoreFilename = "keystore.pkcs12";
        expectedKeystorePass = "badPassword";
        expectedKeystoreType = KeystoreType.PKCS12;
        parseAndCheckExpected(new String[] { "--" + SiteToSiteCliMain.KEYSTORE_OPTION, expectedKeystoreFilename,
                "--" + SiteToSiteCliMain.KEY_STORE_PASSWORD_OPTION, expectedKeystorePass,
                "--" + SiteToSiteCliMain.KEY_STORE_TYPE_OPTION, expectedKeystoreType.toString() });
    }

    @Test
    public void testParseTruststore() throws ParseException {
        expectedTruststoreFilename = "truststore.pkcs12";
        expectedTruststorePass = "badPassword";
        expectedTruststoreType = KeystoreType.PKCS12;
        parseAndCheckExpected(
                new String[] { "--" + SiteToSiteCliMain.TRUST_STORE_OPTION, expectedTruststoreFilename,
                        "--" + SiteToSiteCliMain.TRUST_STORE_PASSWORD_OPTION, expectedTruststorePass,
                        "--" + SiteToSiteCliMain.TRUST_STORE_TYPE_OPTION, expectedTruststoreType.toString() });
    }

    @Test
    public void testParseCompression() throws ParseException {
        expectedCompression = true;
        parseAndCheckExpected("c", SiteToSiteCliMain.COMPRESSION_OPTION, null);
    }

    @Test
    public void testParsePeerPersistenceFile() throws ParseException {
        String pathname = "test";
        expectedPeerPersistenceFile = new File(pathname);
        parseAndCheckExpected(null, SiteToSiteCliMain.PEER_PERSISTENCE_FILE_OPTION, pathname);
    }

    @Test
    public void testParseBatchCount() throws ParseException {
        expectedBatchCount = 55;
        parseAndCheckExpected(null, SiteToSiteCliMain.BATCH_COUNT_OPTION, Integer.toString(expectedBatchCount));
    }

    @Test
    public void testParseBatchDuration() throws ParseException {
        expectedBatchDuration = TimeUnit.MINUTES.toNanos(5);
        parseAndCheckExpected(null, SiteToSiteCliMain.BATCH_DURATION_OPTION, "5 min");
    }

    @Test
    public void testParseBatchSize() throws ParseException {
        expectedBatchSize = 1026;
        parseAndCheckExpected(null, SiteToSiteCliMain.BATCH_SIZE_OPTION, Long.toString(expectedBatchSize));
    }

    @Test
    public void testParseProxy() throws ParseException {
        String expectedHost = "testHost";
        int expectedPort = 292;
        String expectedUser = "testUser";
        String expectedPassword = "badPassword";
        expectedHttpProxy = new HttpProxy(expectedHost, expectedPort, expectedUser, expectedPassword);
        parseAndCheckExpected(new String[] { "--" + SiteToSiteCliMain.PROXY_HOST_OPTION, expectedHost,
                "--" + SiteToSiteCliMain.PROXY_PORT_OPTION, Integer.toString(expectedPort),
                "--" + SiteToSiteCliMain.PROXY_USERNAME_OPTION, expectedUser,
                "--" + SiteToSiteCliMain.PROXY_PASSWORD_OPTION, expectedPassword });
    }

    @Test
    public void testParseTransferDirection() throws ParseException {
        expectedTransferDirection = TransferDirection.RECEIVE;
        parseAndCheckExpected("d", SiteToSiteCliMain.DIRECTION_OPTION, expectedTransferDirection.toString());
    }

    private void parseAndCheckExpected(String shortOption, String longOption, String value) throws ParseException {
        if (shortOption != null) {
            String[] args;
            if (value == null) {
                args = new String[] { "-" + shortOption };
            } else {
                args = new String[] { "-" + shortOption, value };
            }
            parseAndCheckExpected(args);
        }
        String[] args;
        if (value == null) {
            args = new String[] { "--" + longOption };
        } else {
            args = new String[] { "--" + longOption, value };
        }
        parseAndCheckExpected(args);
    }

    private void parseAndCheckExpected(String[] args) throws ParseException {
        SiteToSiteCliMain.CliParse cliParse = SiteToSiteCliMain.parseCli(new Options(), args);
        SiteToSiteClient.Builder builder = cliParse.getBuilder();
        assertEquals(expectedUrl, builder.getUrl());
        assertEquals(expectedSiteToSiteTransportProtocol, builder.getTransportProtocol());
        assertEquals(expectedPortName, builder.getPortName());
        assertEquals(expectedPortIdentifier, builder.getPortIdentifier());
        assertEquals(expectedTimeoutNs, builder.getTimeout(TimeUnit.NANOSECONDS));
        assertEquals(expectedPenalizationNs, builder.getPenalizationPeriod(TimeUnit.NANOSECONDS));
        assertEquals(expectedKeystoreFilename, builder.getKeystoreFilename());
        assertEquals(expectedKeystorePass, builder.getKeystorePass());
        assertEquals(expectedKeystoreType, builder.getKeystoreType());
        assertEquals(expectedTruststoreFilename, builder.getTruststoreFilename());
        assertEquals(expectedTruststorePass, builder.getTruststorePass());
        assertEquals(expectedTruststoreType, builder.getTruststoreType());
        assertEquals(expectedCompression, builder.isUseCompression());
        assertEquals(expectedPeerPersistenceFile, builder.getPeerPersistenceFile());
        if (expectedHttpProxy == null) {
            assertNull(builder.getHttpProxy());
        } else {
            HttpProxy httpProxy = builder.getHttpProxy();
            assertNotNull(httpProxy);
            assertEquals(expectedHttpProxy.getHttpHost(), httpProxy.getHttpHost());
            assertEquals(expectedHttpProxy.getUsername(), httpProxy.getUsername());
            assertEquals(expectedHttpProxy.getPassword(), httpProxy.getPassword());
        }
        SiteToSiteClientConfig siteToSiteClientConfig = builder.buildConfig();
        assertEquals(expectedBatchCount, siteToSiteClientConfig.getPreferredBatchCount());
        assertEquals(expectedBatchDuration, siteToSiteClientConfig.getPreferredBatchDuration(TimeUnit.NANOSECONDS));
        assertEquals(expectedBatchSize, siteToSiteClientConfig.getPreferredBatchSize());
        assertEquals(expectedTransferDirection, cliParse.getTransferDirection());
    }
}