org.apache.metron.pcapservice.PcapGetterHBaseImplTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.metron.pcapservice.PcapGetterHBaseImplTest.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.metron.pcapservice;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.ListUtils;
import org.apache.commons.io.FileUtils;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Scan;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.util.Assert;

import org.apache.metron.pcapservice.PcapGetterHBaseImpl;
import org.apache.metron.pcapservice.PcapsResponse;

/**
 * The Class PcapGetterHBaseImplTest.
 */
public class PcapGetterHBaseImplTest {

    /**
     * Sets the up.
     * 
     * @throws Exception
     *           the exception
     */
    @Before
    public void setUp() throws Exception {
    }

    /**
     * Tear down.
     * 
     * @throws Exception
     *           the exception
     */
    @After
    public void tearDown() throws Exception {
    }

    /**
     * Test_get pcaps_with list.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @SuppressWarnings("unchecked")
    @Test
    public void test_getPcaps_withList() throws IOException {
        // mocking
        String[] keys = { "0a07002b-0a078039-06-1e8b-0087", "0a070025-0a07807a-06-aab8-c360" };
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        PcapGetterHBaseImpl spy = Mockito.spy(pcapGetter);

        List<byte[]> mockPcaps = new ArrayList<byte[]>();
        mockPcaps.add(getTestPcapBytes());

        // Mockito.doReturn(mockPcaps).when(spy).scanPcaps(Mockito.any(ArrayList.class),
        // Mockito.any(HTable.class), Mockito.any(Scan.class),
        // Mockito.any(byte[].class), Mockito.any(byte[].class));
        //
        //
        // actual call
        // PcapsResponse response = spy.getPcaps(Arrays.asList(keys));

        // verify
        // Assert.assertTrue(response.getResponseSize() == mockPcaps.get(0).length);
    }

    /**
     * Test_get pcaps_with key.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @SuppressWarnings("unchecked")
    @Test
    public void test_getPcaps_withKey() throws IOException {
        // mocking
        String key = "0a07002b-0a078039-06-1e8b-0087";
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        PcapGetterHBaseImpl spy = Mockito.spy(pcapGetter);

        List<byte[]> mockPcaps = new ArrayList<byte[]>();
        mockPcaps.add(getTestPcapBytes());

        // //
        // Mockito.doReturn(mockPcaps).when(spy).scanPcaps(Mockito.any(ArrayList.class),
        // Mockito.any(HTable.class), Mockito.any(Scan.class),
        // Mockito.any(byte[].class), Mockito.any(byte[].class));
        //

        // actual call
        // PcapsResponse response = spy.getPcaps(key);

        // verify
        // Assert.assertTrue(response.getResponseSize() == mockPcaps.get(0).length);
    }

    /**
     * Test_get pcaps_with key and timestamps.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @SuppressWarnings("unchecked")
    @Test
    public void test_getPcaps_withKeyAndTimestamps() throws IOException {
        // mocking
        String key = "0a07002b-0a078039-06-1e8b-0087";
        long startTime = 1376782349234555L;
        long endTime = 1396782349234555L;
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        PcapGetterHBaseImpl spy = Mockito.spy(pcapGetter);

        List<byte[]> mockPcaps = new ArrayList<byte[]>();
        mockPcaps.add(getTestPcapBytes());

        // Mockito.doReturn(mockPcaps).when(spy).scanPcaps(Mockito.any(ArrayList.class),
        // Mockito.any(HTable.class), Mockito.any(Scan.class),
        // Mockito.any(byte[].class), Mockito.any(byte[].class));

        // actual call
        // PcapsResponse response = spy.getPcaps(key, startTime, endTime, false);

        // verify
        // Assert.assertTrue(response.getResponseSize() == mockPcaps.get(0).length);
    }

    /**
     * Test_get pcaps_with key_multiple pcaps.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @SuppressWarnings("unchecked")
    @Test
    public void test_getPcaps_withKey_multiplePcaps() throws IOException {
        // mocking
        String key = "0a07002b-0a078039-06-1e8b-0087";
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        PcapGetterHBaseImpl spy = Mockito.spy(pcapGetter);

        List<byte[]> mockPcaps = new ArrayList<byte[]>();
        mockPcaps.add(getTestPcapBytes());
        mockPcaps.add(getTestPcapBytes());

        /*
         * Mockito.doReturn(mockPcaps).when(spy).scanPcaps(Mockito.any(ArrayList.class
         * ), Mockito.any(HTable.class), Mockito.any(Scan.class),
         * Mockito.any(byte[].class), Mockito.any(byte[].class));
         */
        // actual call
        // PcapsResponse response = spy.getPcaps(key);

        // verify
        // Assert.assertNotNull(response);
        // Assert.assertTrue(response.getResponseSize() > mockPcaps.get(0).length);
    }

    /**
     * Gets the test pcap bytes.
     * 
     * @return the test pcap bytes
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    private byte[] getTestPcapBytes() throws IOException {
        File fin = new File("src/test/resources/test-tcp-packet.pcap");
        byte[] pcapBytes = FileUtils.readFileToByteArray(fin);
        return pcapBytes;
    }

    /**
     * Test_remove duplicates.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_removeDuplicates() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        List<String> keys = new ArrayList<String>();

        keys.add("18800006-1800000b-06-0050-5af6");
        keys.add("18800006-1800000b-11-0035-3810");
        keys.add("18800006-1800000b-06-0019-caac");
        keys.add("18800006-1800000b-06-0050-5af6");

        List<String> deDupKeys = pcapGetter.removeDuplicateKeys(keys);
        Assert.isTrue(deDupKeys.size() == 3);
        List<String> testKeys = new ArrayList<String>();
        keys.add("18800006-1800000b-06-0050-5af6");
        keys.add("18800006-1800000b-11-0035-3810");
        keys.add("18800006-1800000b-06-0019-caac");

        ListUtils.isEqualList(deDupKeys, testKeys);
    }

    /**
     * Test_sort keys by asc order_with out reverse traffic.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_sortKeysByAscOrder_withOutReverseTraffic() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        List<String> keys = new ArrayList<String>();
        keys.add("18800006-1800000b-11-0035-3810");
        keys.add("18800006-1800000b-06-0050-5af6");
        keys.add("18800006-1800000b-06-0019-caac");

        List<String> result = pcapGetter.sortKeysByAscOrder(keys, false);

        List<String> testKeys = new ArrayList<String>();
        testKeys.add("18800006-1800000b-06-0019-caac");
        testKeys.add("18800006-1800000b-06-0050-5af6");
        testKeys.add("18800006-1800000b-11-0035-3810");

        Assert.isTrue(ListUtils.isEqualList(result, testKeys));
    }

    /**
     * Test_sort keys by asc order_with reverse traffic.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_sortKeysByAscOrder_withReverseTraffic() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        List<String> keys = new ArrayList<String>();
        keys.add("18800006-1800000b-11-0035-3812");
        keys.add("18800006-1800000b-11-0035-3810");
        keys.add("18800006-1800000b-11-0035-3811");

        List<String> result = pcapGetter.sortKeysByAscOrder(keys, true);
        Assert.isTrue(result.size() == 6);
    }

    /**
     * Test_sort keys by asc order_get unprocessed sublist of keys.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_sortKeysByAscOrder_getUnprocessedSublistOfKeys() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        List<String> keys = new ArrayList<String>();
        keys.add("18800006-1800000b-11-0035-3810");
        keys.add("18800006-1800000b-06-0050-5af6");
        keys.add("18800006-1800000b-06-0019-caac");
        System.out.println("original keys =" + keys.toString());

        List<String> sortedKeys = pcapGetter.sortKeysByAscOrder(keys, false);
        System.out.println("after sortKeysByAscOrder =" + sortedKeys.toString());

        List<String> unprocessedKeys1 = pcapGetter.getUnprocessedSublistOfKeys(sortedKeys,
                "18800006-1800000b-06-0019-caac-65140-40815");
        System.out.println("unprocessedKeys1 =" + unprocessedKeys1);
        Assert.isTrue(unprocessedKeys1.size() == 2);

        List<String> unprocessedKeys2 = pcapGetter.getUnprocessedSublistOfKeys(sortedKeys,
                "18800006-1800000b-06-0050-5af6-65140-40815");
        // System.out.println("unprocessedKeys2 ="+unprocessedKeys2);
        Assert.isTrue(unprocessedKeys2.size() == 1);

        List<String> unprocessedKeys3 = pcapGetter.getUnprocessedSublistOfKeys(sortedKeys,
                "18800006-1800000b-11-0035-3810-6514040815");
        // System.out.println("unprocessedKeys3 ="+unprocessedKeys3);
        Assert.isTrue(unprocessedKeys3.size() == 0);

    }

    /**
     * Test_sort keys by asc order_get unprocessed sublist of keys_with out match.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_sortKeysByAscOrder_getUnprocessedSublistOfKeys_withOutMatch() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        List<String> keys = new ArrayList<String>();
        keys.add("18800006-1800000b-11-0035-3810");
        keys.add("18800006-1800000b-06-0050-5af6");
        keys.add("18800006-1800000b-06-0019-caac");
        System.out.println("original keys =" + keys.toString());

        List<String> sortedKeys = pcapGetter.sortKeysByAscOrder(keys, false);
        System.out.println("after sortKeysByAscOrder =" + sortedKeys.toString());

        List<String> unprocessedKeys1 = pcapGetter.getUnprocessedSublistOfKeys(sortedKeys,
                "18800006-1800000b-11-89-455-65140-40815");
        System.out.println("unprocessedKeys1 =" + unprocessedKeys1);
        Assert.isTrue(unprocessedKeys1.size() == 3);
    }

    /**
     * Test_create start and stop row keys.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_createStartAndStopRowKeys() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        String key = "18800006-1800000b-11-0035-3810";
        Map<String, String> map = pcapGetter.createStartAndStopRowKeys(key, false, false);
        System.out.println("map =" + map.toString());

        String lastRowKey = "18800006-1800000b-11-0035-3810-23234-32423";
        Map<String, String> map1 = pcapGetter.createStartAndStopRowKeys(lastRowKey, true, false);
        System.out.println("map1 =" + map1.toString());

        String lastRowKey2 = "18800006-1800000b-11-0035-3810-23234-32423";
        Map<String, String> map2 = pcapGetter.createStartAndStopRowKeys(lastRowKey2, true, true);
        System.out.println("map2 =" + map2.toString());

    }

    /**
     * Test_check if valid input_valid.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_checkIfValidInput_valid() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        List<String> keys = new ArrayList<String>();
        keys.add("18800006-1800000b-11-0035-3810");
        keys.add("18800006-1800000b-06-0050-5af6");
        keys.add("18800006-1800000b-06-0019-caac");

        String lastRowKey = "18800006-1800000b-11-0035-3810-23234-32423";

        boolean response = pcapGetter.checkIfValidInput(keys, lastRowKey);
        Assert.isTrue(response);

    }

    /**
     * Test_check if valid input_in valid.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_checkIfValidInput_inValid() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        @SuppressWarnings("unchecked")
        boolean response = pcapGetter.checkIfValidInput(Collections.EMPTY_LIST, null);
        Assert.isTrue(!response);

    }

    /**
     * Test_check if valid input_valid_mixed.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_checkIfValidInput_valid_mixed() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        String lastRowKey = "18800006-1800000b-11-0035-3810-23234-32423";
        @SuppressWarnings("unchecked")
        boolean response = pcapGetter.checkIfValidInput(Collections.EMPTY_LIST, lastRowKey);
        Assert.isTrue(response);
    }

    /**
     * Test_create get request.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_createGetRequest() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        String key = "18800006-1800000b-11-0035-3810-23234-324230";

        long startTime = 139812323L; // in seconds
        long endTime = 139923424L; // in seconds

        Get get = pcapGetter.createGetRequest(key, startTime, endTime);
        Assert.notNull(get);

        Assert.isTrue(Arrays.equals(get.getRow(), key.getBytes()));
        // compare in micros as the data creation time unit is set to Micros in
        // properties file.
        Assert.isTrue(get.getTimeRange().getMin() == startTime * 1000);
        Assert.isTrue(get.getTimeRange().getMax() == endTime * 1000);
    }

    /**
     * Test_create get request_default time range.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_createGetRequest_defaultTimeRange() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        String key = "18800006-1800000b-11-0035-3810-23234-324230";

        Get get = pcapGetter.createGetRequest(key, -1, -1);
        Assert.notNull(get);

        Assert.isTrue(Arrays.equals(get.getRow(), key.getBytes()));
        Assert.isTrue(get.getTimeRange().getMin() == 0);
    }

    /**
     * Test_create get request_with start time.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_createGetRequest_withStartTime() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        String key = "18800006-1800000b-11-0035-3810-23234-324230";

        long startTime = 139812323L; // in seconds

        Get get = pcapGetter.createGetRequest(key, startTime, -1);
        Assert.notNull(get);

        Assert.isTrue(Arrays.equals(get.getRow(), key.getBytes()));
        Assert.isTrue(get.getTimeRange().getMin() == startTime * 1000);
        Assert.isTrue(get.getTimeRange().getMax() == Long.valueOf(Long.MAX_VALUE));
    }

    /**
     * Test_create get request_with end time.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_createGetRequest_withEndTime() throws IOException {
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();
        String key = "18800006-1800000b-11-0035-3810-23234-324230";

        long endTime = 139923424L; // in seconds

        Get get = pcapGetter.createGetRequest(key, -1, endTime);
        Assert.notNull(get);

        Assert.isTrue(Arrays.equals(get.getRow(), key.getBytes()));
        Assert.isTrue(get.getTimeRange().getMin() == 0);
        Assert.isTrue(get.getTimeRange().getMax() == endTime * 1000);
    }

    /**
     * Test_create scan request.
     * 
     * @throws IOException
     *           Signals that an I/O exception has occurred.
     */
    @Test
    public void test_createScanRequest() throws IOException {
        // mocking
        PcapGetterHBaseImpl pcapGetter = (PcapGetterHBaseImpl) PcapGetterHBaseImpl.getInstance();

        PcapsResponse pcapsResponse = new PcapsResponse();

        Map<String, String> keysMap = new HashMap<String, String>();
        String startKey = "0a07002b-0a078039-06-1e8b-0087-00000-00000";
        String endKey = "0a070025-0a07807a-06-aab8-c360-99999-99999";
        keysMap.put("startKey", startKey);
        keysMap.put("endKey", endKey);

        long startTime = 139812323L; // in seconds
        long endTime = 139923424L; // in seconds
        long maxResultSize = 673424;

        // actual call
        Scan scan = pcapGetter.createScanRequest(pcapsResponse, keysMap, startTime, endTime, maxResultSize);

        // verify time range
        Assert.isTrue(scan.getTimeRange().getMin() == startTime * 1000); // compare
                                                                         // in
                                                                         // millis
        Assert.isTrue(scan.getTimeRange().getMax() == endTime * 1000); // compare
                                                                       // in
                                                                       // millis

        // verify start and stop rows
        Assert.isTrue(Arrays.equals(scan.getStartRow(), startKey.getBytes()));
        Assert.isTrue(Arrays.equals(scan.getStopRow(), endKey.getBytes()));

    }

}