Package com.senseidb.test

Source Code of com.senseidb.test.TestRequestConverter2

/**
* This software is licensed to you under the Apache License, Version 2.0 (the
* "Apache License").
*
* LinkedIn's contributions are made under the Apache License. If you contribute
* to the Software, the contributions will be deemed to have been made under the
* Apache License, unless you expressly indicate otherwise. Please do not make any
* contributions that would be inconsistent with the Apache License.
*
* You may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, this software
* distributed under the Apache License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache
* License for the specific language governing permissions and limitations for the
* software governed under the Apache License.
*
* © 2012 LinkedIn Corp. All Rights Reserved. 
*/
package com.senseidb.test;

import static org.junit.Assert.assertTrue;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.codec.binary.Base64;
import org.apache.lucene.search.SortField;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.BeforeClass;
import org.junit.Test;

import com.browseengine.bobo.api.FacetSpec.FacetSortSpec;
import com.browseengine.bobo.facets.FacetHandlerInitializerParam;
import com.senseidb.search.req.SenseiRequest;
import com.senseidb.util.RequestConverter2;

public class TestRequestConverter2
{

  static JSONObject senseiRequestJson = null;
  static JSONObject queryJson = null;
  static JSONArray selectionsJson = null;
  static JSONObject filtersJson = null;

  public static JSONObject readJSONFromFile(String fileName) throws Exception
  {
    File file = new File(fileName);
    BufferedReader br = new BufferedReader(new FileReader(file));
    StringBuffer sb = new StringBuffer();
    String line = br.readLine();
    while (line != null)
    {
      if (!line.trim().startsWith("//"))
      {
        if(line.indexOf("//")>0)
          line = line.substring(0, line.indexOf("//"));
        sb.append(line.trim());
      }
      line = br.readLine();
    }
   
    return new JSONObject(sb.toString());
  }
 
  public static JSONArray readJSONArrayFromFile(String fileName) throws Exception
  {
    File file = new File(fileName);
    BufferedReader br = new BufferedReader(new FileReader(file));
    StringBuffer sb = new StringBuffer();
    String line = br.readLine();
    while (line != null)
    {
      if (!line.trim().startsWith("//"))
      {
        if(line.indexOf("//")>0)
          line = line.substring(0, line.indexOf("//"));
        sb.append(line.trim());
      }
      line = br.readLine();
    }
   
    return new JSONArray(sb.toString());
  }
 
  @BeforeClass
  public static void setUpBeforeClass() throws Exception
  {
    senseiRequestJson = readJSONFromFile("src/test/json/sensei-request.json");
    selectionsJson = readJSONArrayFromFile("src/test/json/selections.json");
    queryJson = readJSONFromFile("src/test/json/queries.json");
    filtersJson = readJSONFromFile("src/test/json/filters.json");
   
    senseiRequestJson.remove("selections");
    senseiRequestJson.remove("query");
   
    senseiRequestJson.putOpt("selections", selectionsJson);
    senseiRequestJson.putOpt("query", queryJson);
  }

  @Test
  public void test() throws Exception
  {
    SenseiRequest req = RequestConverter2.fromJSON(senseiRequestJson, null);
   
    //testquery;
//    assertTrue("query_string is not equal", req.getQuery().toString().equals("this AND that OR thus"));
   
    //test paging;
    assertTrue("offset is not correct", req.getOffset() == 0);
    assertTrue("size is not correct", req.getCount() ==10);
   
    //test group by;
    assertTrue("group by is not correct", req.getGroupBy()[0].equals("category"));
    assertTrue("max per group is not correct", req.getMaxPerGroup() == 3);
   
    //test filters;
   
   
    //test facets;
    assertTrue("facet number is not correct", req.getFacetSpecCount() ==1);
    assertTrue("facet category max", req.getFacetSpec("category").getMaxCount()==10);
    assertTrue("facet category min", req.getFacetSpec("category").getMinHitCount()==1);
    assertTrue("facet category expand", req.getFacetSpec("category").isExpandSelection() == false);
    assertTrue("facet category order", req.getFacetSpec("category").getOrderBy()== FacetSortSpec.OrderHitsDesc);
   
    //test facet initial parameters;
    Map<String, FacetHandlerInitializerParam> mapParams = req.getFacetHandlerInitParamMap();
    assertTrue("facet number is not correct", mapParams.size() ==1);
    FacetHandlerInitializerParam param = mapParams.get("network");
   
    boolean[] coldstart = param.getBooleanParam("coldStart");
    evaluateBool(coldstart, new boolean[]{true});
   
    List<String> names = param.getStringParam("names");
    ArrayList<String> ar = new ArrayList<String>();
    ar.add("a");
    ar.add("b");
    ar.add("c");
    evaluateListString(names, ar);
   
    double[] timeout = param.getDoubleParam("timeOut");
    evaluateDouble(timeout, new double[]{2.4});
   
    int[] srcId = param.getIntParam("srcId");
    evaluateInt(srcId, new int[]{26609850});
   
    long[] longId = param.getLongParam("longId");
    evaluateLong(longId, new long[]{1234567890L, 9876543210L});
   
    byte[] base64 = param.getByteArrayParam("binary");
    evaluateBytes(base64, (new String("Hello world")).getBytes());
   
    //test sortby;
    assertTrue("first sort by is not correct", req.getSort()[0].getField().equals("color"));
    assertTrue("first sort by order is not correct", req.getSort()[0].getReverse() == true);
    assertTrue("secondary sort by is not correct", req.getSort()[1] == SortField.FIELD_SCORE);
   
    //test fetchStored;
    assertTrue("fetchStored is not correct", req.isFetchStoredFields() == false);
    assertTrue("fetchStoredValue is not correct", req.isFetchStoredValue() == false);
   
    //test fetchTermVectors;
//    assertTrue("fetchTermVectors is not correct", req.getTermVectorsToFetch().size() ==0);
   
    //test partitions;
    assertTrue("partition test 1", req.getPartitions().contains(1));
    assertTrue("partition test 2", req.getPartitions().contains(2));
    assertTrue("partition size test", req.getPartitions().size() ==2);
   
    //test explain;
    assertTrue("explain test", req.isShowExplanation() == false);
   
    //test routeParam;
    assertTrue("routing parameter test", req.getRouteParam()!= null); // when it is a null, we get a rand int;
  }

  private void evaluateBytes(byte[] result, byte[] sample)
  {
    assertTrue("byte array size is not correct", result.length == sample.length);
    for(int i=0; i< result.length; i++)
    {
      assertTrue("content in byte array is not the same", result[i] == sample[i]);
    }
  }

  private void evaluateLong(long[] result, long[] sample)
  {
    assertTrue("long array size is not correct", result.length == sample.length);
    for(int i=0; i< result.length; i++)
    {
      assertTrue("content in long array is not the same", result[i] == sample[i]);
    }
  }

  private void evaluateInt(int[] result, int[] sample)
  {
    assertTrue("int array size is not correct", result.length == sample.length);
    for(int i=0; i< result.length; i++)
    {
      assertTrue("content in int array is not the same", result[i] == sample[i]);
    }
   
  }

  private void evaluateDouble(double[] result, double[] sample)
  {
    assertTrue("double array size is not correct", result.length == sample.length);
    for(int i=0; i< result.length; i++)
    {
      assertTrue("content in double array is not the same", result[i] == sample[i]);
    }
  }

  private void evaluateListString(List<String> result, ArrayList<String> sample)
  {
    assertTrue("string array size is not correct", result.size() == sample.size());
    for(int i=0; i< result.size(); i++)
    {
      assertTrue("content in double array is not the same", result.get(i).equals(sample.get(i)));
    }
  }

  private void evaluateBool(boolean[] result, boolean[] sample)
  {
    assertTrue("boolean array size is not correct", result.length == sample.length);
    for(int i=0; i< result.length; i++)
    {
      assertTrue("content in boolean array is not the same", result[i] == sample[i]);
    }
  }

  @Test
  public void testBase64() throws Exception
  {
    try {
      String clearText = "Hello world";
      String encodedText;

      // Base64
      encodedText = new String(Base64.encodeBase64(clearText.getBytes()));
//      System.out.println("Encoded: " + encodedText);
      byte[] encodedbytes = encodedText.getBytes();
//      System.out.println("Decoded:"  + new String(Base64.decodeBase64(encodedbytes)));
      //   
      // output :
      //   Encoded: SGVsbG8gd29ybGQ=
      //   Decoded:Hello world     
      //
      assertTrue("Hello world".equals(new String(Base64.decodeBase64(encodedbytes))));
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}
TOP

Related Classes of com.senseidb.test.TestRequestConverter2

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.