Search in sources :

Example 1 with TestRecord

use of com.linkedin.restli.server.TestRecord in project rest.li by linkedin.

the class TestArgumentBuilder method testBuildArgsHappyPath.

@Test
public void testBuildArgsHappyPath() {
    //test integer association key integer
    String param1Key = "param1";
    Parameter<Integer> param1 = new Parameter<Integer>(param1Key, Integer.class, DataTemplateUtil.getSchema(Integer.class), false, null, Parameter.ParamType.ASSOC_KEY_PARAM, false, AnnotationSet.EMPTY);
    Integer param1Value = 123;
    //test regular string argument
    String param2Key = "param2";
    Parameter<String> param2 = new Parameter<String>(param2Key, String.class, DataTemplateUtil.getSchema(String.class), true, null, Parameter.ParamType.QUERY, true, AnnotationSet.EMPTY);
    String param2Value = "param2Value";
    //test data template argument array with more than element
    String param3Key = "param3";
    Parameter<StringArray> param3 = new Parameter<StringArray>(param3Key, StringArray.class, DataTemplateUtil.getSchema(StringArray.class), true, null, Parameter.ParamType.QUERY, true, AnnotationSet.EMPTY);
    DataList param3Value = new DataList(Arrays.asList("param3a", "param3b"));
    StringArray param3Final = new StringArray(param3Value);
    //test data template argument array with only one element
    String param4Key = "param4";
    Parameter<StringArray> param4 = new Parameter<StringArray>(param4Key, StringArray.class, DataTemplateUtil.getSchema(StringArray.class), true, null, Parameter.ParamType.QUERY, true, AnnotationSet.EMPTY);
    String param4Value = "param4Value";
    StringArray param4Final = new StringArray(new DataList(Collections.singletonList(param4Value)));
    // test record template
    String param5Key = "param5";
    Parameter<TestRecord> param5 = new Parameter<TestRecord>(param5Key, TestRecord.class, DataTemplateUtil.getSchema(TestRecord.class), true, null, Parameter.ParamType.QUERY, true, AnnotationSet.EMPTY);
    DataMap param5Value = new DataMap();
    param5Value.put("doubleField", "5.5");
    param5Value.put("floatField", "5");
    param5Value.put("intField", "5");
    param5Value.put("longField", "5");
    TestRecord param5Final = new TestRecord();
    param5Final.setDoubleField(5.5);
    param5Final.setFloatField(5F);
    param5Final.setIntField(5);
    param5Final.setLongField(5);
    // test record template array
    String param6Key = "param6";
    Parameter<TestRecordArray> param6 = new Parameter<TestRecordArray>(param6Key, TestRecordArray.class, DataTemplateUtil.getSchema(TestRecordArray.class), true, null, Parameter.ParamType.QUERY, true, AnnotationSet.EMPTY);
    DataList param6Value = new DataList();
    DataMap testRecordDataMap1 = new DataMap();
    testRecordDataMap1.put("doubleField", "6.6");
    testRecordDataMap1.put("floatField", "6");
    testRecordDataMap1.put("intField", "6");
    testRecordDataMap1.put("longField", "6");
    DataMap testRecordDataMap2 = new DataMap();
    testRecordDataMap2.put("doubleField", "66.6");
    testRecordDataMap2.put("floatField", "66");
    testRecordDataMap2.put("intField", "66");
    testRecordDataMap2.put("longField", "66");
    param6Value.add(testRecordDataMap1);
    param6Value.add(testRecordDataMap2);
    TestRecordArray param6Final = new TestRecordArray();
    TestRecord testRecord1 = new TestRecord();
    testRecord1.setDoubleField(6.6);
    testRecord1.setFloatField(6);
    testRecord1.setIntField(6);
    testRecord1.setLongField(6);
    TestRecord testRecord2 = new TestRecord();
    testRecord2.setDoubleField(66.6);
    testRecord2.setFloatField(66);
    testRecord2.setIntField(66);
    testRecord2.setLongField(66);
    param6Final.add(testRecord1);
    param6Final.add(testRecord2);
    List<Parameter<?>> parameters = new ArrayList<Parameter<?>>();
    parameters.add(param1);
    parameters.add(param2);
    parameters.add(param3);
    parameters.add(param4);
    parameters.add(param5);
    parameters.add(param6);
    Object[] positionalArguments = new Object[0];
    Capture<String> param1Capture = new Capture<String>();
    Capture<String> param2Capture = new Capture<String>();
    Capture<String> param3Capture = new Capture<String>();
    Capture<String> param4Capture = new Capture<String>();
    Capture<String> param5Capture = new Capture<String>();
    Capture<String> param6Capture = new Capture<String>();
    ServerResourceContext mockResourceContext = EasyMock.createMock(ServerResourceContext.class);
    EasyMock.expect(mockResourceContext.getRequestAttachmentReader()).andReturn(null);
    MutablePathKeys mockPathKeys = EasyMock.createMock(MutablePathKeys.class);
    ResourceMethodDescriptor mockResourceMethodDescriptor = getMockResourceMethod(parameters);
    //easy mock for processing param1
    EasyMock.expect(mockPathKeys.get(EasyMock.capture(param1Capture))).andReturn(param1Value);
    EasyMock.expect(mockResourceContext.getPathKeys()).andReturn(mockPathKeys);
    //easy mock for processing param2
    EasyMock.expect(mockResourceContext.getParameter(EasyMock.capture(param2Capture))).andReturn(param2Value);
    //easy mock for processing param3
    EasyMock.expect(mockResourceContext.getStructuredParameter(EasyMock.capture(param3Capture))).andReturn(param3Value);
    //easy mock for processing param4
    EasyMock.expect(mockResourceContext.getStructuredParameter(EasyMock.capture(param4Capture))).andReturn(param4Value);
    //easy mock for processing param5
    EasyMock.expect(mockResourceContext.getStructuredParameter(EasyMock.capture(param5Capture))).andReturn(param5Value);
    //easy mock for processing param6
    EasyMock.expect(mockResourceContext.getStructuredParameter(EasyMock.capture(param6Capture))).andReturn(param6Value);
    EasyMock.replay(mockResourceContext, mockPathKeys);
    Object[] results = ArgumentBuilder.buildArgs(positionalArguments, mockResourceMethodDescriptor, mockResourceContext, null);
    EasyMock.verify(mockPathKeys, mockResourceContext, mockResourceMethodDescriptor);
    Assert.assertEquals(param1Capture.getValue(), param1Key);
    Assert.assertEquals(param2Capture.getValue(), param2Key);
    Assert.assertEquals(param3Capture.getValue(), param3Key);
    Assert.assertEquals(param4Capture.getValue(), param4Key);
    Assert.assertEquals(param5Capture.getValue(), param5Key);
    Assert.assertEquals(param6Capture.getValue(), param6Key);
    Assert.assertEquals(results[0], param1Value);
    Assert.assertEquals(results[1], param2Value);
    Assert.assertEquals(results[2], param3Final);
    Assert.assertEquals(results[3], param4Final);
    Assert.assertEquals(results[4], param5Final);
    Assert.assertEquals(results[5], param6Final);
}
Also used : MutablePathKeys(com.linkedin.restli.internal.server.MutablePathKeys) ResourceMethodDescriptor(com.linkedin.restli.internal.server.model.ResourceMethodDescriptor) ArrayList(java.util.ArrayList) Capture(org.easymock.Capture) DataMap(com.linkedin.data.DataMap) DataList(com.linkedin.data.DataList) StringArray(com.linkedin.data.template.StringArray) TestRecordArray(com.linkedin.restli.server.TestRecordArray) ServerResourceContext(com.linkedin.restli.internal.server.ServerResourceContext) Parameter(com.linkedin.restli.internal.server.model.Parameter) TestRecord(com.linkedin.restli.server.TestRecord) Test(org.testng.annotations.Test)

Example 2 with TestRecord

use of com.linkedin.restli.server.TestRecord in project rest.li by linkedin.

the class TestRestLiMethodInvocation method testActionParameterTypeCoercion.

@Test
public void testActionParameterTypeCoercion() throws Exception {
    ResourceModel model;
    ResourceMethodDescriptor methodDescriptor;
    CombinedResources.TestActionsResource resource;
    String jsonEntityBody;
    model = buildResourceModel(CombinedResources.TestActionsResource.class);
    methodDescriptor = model.findActionMethod("intParam", ResourceLevel.COLLECTION);
    resource = getMockResource(CombinedResources.TestActionsResource.class);
    int expectedInt = DataTemplateUtil.coerceOutput(Long.MAX_VALUE, Integer.class);
    resource.intParam(expectedInt);
    EasyMock.expectLastCall().once();
    jsonEntityBody = RestLiTestHelper.doubleQuote("{'intParam':" + String.valueOf(Long.MAX_VALUE) + "}");
    checkInvocation(resource, methodDescriptor, "POST", version, "/test?action=intParam", jsonEntityBody, buildPathKeys());
    methodDescriptor = model.findActionMethod("longParam", ResourceLevel.COLLECTION);
    resource = getMockResource(CombinedResources.TestActionsResource.class);
    long expectedLong = DataTemplateUtil.coerceOutput(Integer.MAX_VALUE, Long.class);
    resource.longParam(expectedLong);
    EasyMock.expectLastCall().once();
    jsonEntityBody = RestLiTestHelper.doubleQuote("{'longParam':" + String.valueOf(Integer.MAX_VALUE) + "}");
    checkInvocation(resource, methodDescriptor, "POST", version, "/test?action=longParam", jsonEntityBody, buildPathKeys());
    methodDescriptor = model.findActionMethod("byteStringParam", ResourceLevel.COLLECTION);
    resource = getMockResource(CombinedResources.TestActionsResource.class);
    String str = "test string";
    ByteString expectedByteString = ByteString.copyString(str, "UTF-8");
    resource.byteStringParam(expectedByteString);
    EasyMock.expectLastCall().once();
    jsonEntityBody = RestLiTestHelper.doubleQuote("{'byteStringParam': '" + str + "'}");
    checkInvocation(resource, methodDescriptor, "POST", version, "/test?action=byteStringParam", jsonEntityBody, buildPathKeys());
    methodDescriptor = model.findActionMethod("floatParam", ResourceLevel.COLLECTION);
    resource = getMockResource(CombinedResources.TestActionsResource.class);
    float expectedFloat = DataTemplateUtil.coerceOutput(Double.MAX_VALUE, Float.class);
    resource.floatParam(expectedFloat);
    EasyMock.expectLastCall().once();
    jsonEntityBody = RestLiTestHelper.doubleQuote("{'floatParam': " + String.valueOf(Double.MAX_VALUE) + "}");
    checkInvocation(resource, methodDescriptor, "POST", version, "/test?action=floatParam", jsonEntityBody, buildPathKeys());
    methodDescriptor = model.findActionMethod("doubleParam", ResourceLevel.COLLECTION);
    resource = getMockResource(CombinedResources.TestActionsResource.class);
    float floatValue = 567.5f;
    double expectedDouble = DataTemplateUtil.coerceOutput(floatValue, Double.class);
    resource.doubleParam(expectedDouble);
    EasyMock.expectLastCall().once();
    jsonEntityBody = RestLiTestHelper.doubleQuote("{'doubleParam': " + String.valueOf(floatValue) + "}");
    checkInvocation(resource, methodDescriptor, "POST", version, "/test?action=doubleParam", jsonEntityBody, buildPathKeys());
    methodDescriptor = model.findActionMethod("recordParam", ResourceLevel.COLLECTION);
    resource = getMockResource(CombinedResources.TestActionsResource.class);
    TestRecord expectedRecord = new TestRecord();
    expectedRecord.setIntField(expectedInt);
    expectedRecord.setLongField(expectedLong);
    expectedRecord.setFloatField(expectedFloat);
    expectedRecord.setDoubleField(expectedDouble);
    resource.recordParam(expectedRecord);
    EasyMock.expectLastCall().once();
    jsonEntityBody = RestLiTestHelper.doubleQuote("{'recordParam':{" + "'intField':" + String.valueOf(Long.MAX_VALUE) + "," + "'longField':" + String.valueOf(Integer.MAX_VALUE) + "," + "'floatField':" + String.valueOf(Double.MAX_VALUE) + "," + "'doubleField':" + String.valueOf(floatValue) + "}}");
    checkInvocation(resource, methodDescriptor, "POST", version, "/test?action=recordParam", jsonEntityBody, buildPathKeys());
}
Also used : CombinedResources(com.linkedin.restli.server.combined.CombinedResources) ByteString(com.linkedin.data.ByteString) ResourceMethodDescriptor(com.linkedin.restli.internal.server.model.ResourceMethodDescriptor) ResourceModel(com.linkedin.restli.internal.server.model.ResourceModel) RestLiTestHelper.buildResourceModel(com.linkedin.restli.server.test.RestLiTestHelper.buildResourceModel) ByteString(com.linkedin.data.ByteString) CustomString(com.linkedin.restli.server.custom.types.CustomString) TestRecord(com.linkedin.restli.server.TestRecord) Test(org.testng.annotations.Test) AfterTest(org.testng.annotations.AfterTest) BeforeTest(org.testng.annotations.BeforeTest)

Example 3 with TestRecord

use of com.linkedin.restli.server.TestRecord in project rest.li by linkedin.

the class TestArgumentBuilder method parameterDataWithDefault.

@DataProvider(name = "parameterDataWithDefault")
@SuppressWarnings("deprecation")
private Object[][] parameterDataWithDefault() {
    String intParamKey = "intParam";
    Integer intParamDefault = 123;
    String strParamKey = "strParam";
    String strParamDefault = "str";
    String arrParamKey = "arrParam";
    DataList arrParamDefault = new DataList(Arrays.asList("arrParam1", "arrParam2"));
    String recordParamKey = "recParam";
    TestRecord recordParamDefault = new TestRecord();
    recordParamDefault.setDoubleField(5.5);
    recordParamDefault.setFloatField(5F);
    recordParamDefault.setIntField(5);
    recordParamDefault.setLongField(5);
    return new Object[][] { // primitive integer parameter
    { intParamKey, Integer.TYPE, Parameter.ParamType.KEY, intParamDefault }, { intParamKey, Integer.TYPE, Parameter.ParamType.ASSOC_KEY_PARAM, intParamDefault }, { intParamKey, Integer.TYPE, Parameter.ParamType.POST, intParamDefault }, { intParamKey, Integer.TYPE, Parameter.ParamType.QUERY, intParamDefault }, // string type parameter
    { strParamKey, String.class, Parameter.ParamType.KEY, strParamDefault }, { strParamKey, String.class, Parameter.ParamType.ASSOC_KEY_PARAM, strParamDefault }, { strParamKey, String.class, Parameter.ParamType.POST, strParamDefault }, { strParamKey, String.class, Parameter.ParamType.QUERY, strParamDefault }, // array type parameter
    { arrParamKey, StringArray.class, Parameter.ParamType.KEY, arrParamDefault }, { arrParamKey, StringArray.class, Parameter.ParamType.ASSOC_KEY_PARAM, arrParamDefault }, { arrParamKey, StringArray.class, Parameter.ParamType.POST, arrParamDefault }, { arrParamKey, StringArray.class, Parameter.ParamType.QUERY, arrParamDefault }, // data template parameter
    { recordParamKey, TestRecord.class, Parameter.ParamType.KEY, recordParamDefault }, { recordParamKey, TestRecord.class, Parameter.ParamType.ASSOC_KEY_PARAM, recordParamDefault }, { recordParamKey, TestRecord.class, Parameter.ParamType.POST, recordParamDefault }, { recordParamKey, TestRecord.class, Parameter.ParamType.QUERY, recordParamDefault } };
}
Also used : DataList(com.linkedin.data.DataList) TestRecord(com.linkedin.restli.server.TestRecord) DataProvider(org.testng.annotations.DataProvider)

Aggregations

TestRecord (com.linkedin.restli.server.TestRecord)3 DataList (com.linkedin.data.DataList)2 ResourceMethodDescriptor (com.linkedin.restli.internal.server.model.ResourceMethodDescriptor)2 Test (org.testng.annotations.Test)2 ByteString (com.linkedin.data.ByteString)1 DataMap (com.linkedin.data.DataMap)1 StringArray (com.linkedin.data.template.StringArray)1 MutablePathKeys (com.linkedin.restli.internal.server.MutablePathKeys)1 ServerResourceContext (com.linkedin.restli.internal.server.ServerResourceContext)1 Parameter (com.linkedin.restli.internal.server.model.Parameter)1 ResourceModel (com.linkedin.restli.internal.server.model.ResourceModel)1 TestRecordArray (com.linkedin.restli.server.TestRecordArray)1 CombinedResources (com.linkedin.restli.server.combined.CombinedResources)1 CustomString (com.linkedin.restli.server.custom.types.CustomString)1 RestLiTestHelper.buildResourceModel (com.linkedin.restli.server.test.RestLiTestHelper.buildResourceModel)1 ArrayList (java.util.ArrayList)1 Capture (org.easymock.Capture)1 AfterTest (org.testng.annotations.AfterTest)1 BeforeTest (org.testng.annotations.BeforeTest)1 DataProvider (org.testng.annotations.DataProvider)1