/*
* Copyright (C) 2012 Facebook, Inc.
*
* Licensed 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 com.facebook.swift.service.explicitidentifiers;
import com.facebook.swift.service.base.SuiteBase;
import org.apache.thrift.TException;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
public class ExplicitIdentifiersTest extends SuiteBase<ExplicitIdentifiersServiceHandler, ExplicitIdentifiersServiceClient>
{
public ExplicitIdentifiersTest()
{
super(ExplicitIdentifiersServiceHandler.class, ExplicitIdentifiersServiceClient.class);
}
// Client passes all parameters, but in a different order than the server expects
@Test
public void testExplicitParameterOrdering()
throws TException
{
int integerParam = Integer.MAX_VALUE;
byte byteParam = Byte.MAX_VALUE;
Boolean booleanParam = Boolean.TRUE;
getClient().explicitParameterOrdering("STRING", integerParam, booleanParam, byteParam);
assertEquals(getHandler().getLastIntegerParam().get(), (Integer) integerParam);
assertEquals(getHandler().getLastBooleanParam().get(), booleanParam);
assertEquals(getHandler().getLastByteParam().get(), (Byte) byteParam);
assertEquals(getHandler().getLastStringParam().get(), "STRING");
// other params are not sent or received
assertFalse(getHandler().hasLastCustomParam());
}
// Client passes only one parameter, server expects two
@Test
public void testMissingParameter()
throws TException
{
getClient().missingIncomingParameter(1);
assertEquals(getHandler().getLastIntegerParam().get(), (Integer) 1);
// integer should be received by the handler
assertEquals(getHandler().getLastIntegerParam().get(), (Integer) 1);
// string is not passed, so thrift will fill in the default value for the handler
assertFalse(getHandler().getLastStringParam().isPresent());
// other params are neither sent nor received
assertFalse(getHandler().hasLastBooleanParam());
assertFalse(getHandler().hasLastByteParam());
assertFalse(getHandler().hasLastCustomParam());
}
// Client passes two parameters, server expects only one
@Test
public void testExtraParameter()
throws TException
{
getClient().extraIncomingParameter(1, "2");
// integer should be received by handler
assertEquals(getHandler().getLastIntegerParam().get(), (Integer) 1);
// string is an extra that is sent, but not received by handler
assertFalse(getHandler().hasLastStringParam());
// other params are not sent or received
assertFalse(getHandler().hasLastBooleanParam());
assertFalse(getHandler().hasLastByteParam());
assertFalse(getHandler().hasLastCustomParam());
}
// Client passes two parameters in ID order (1,2), server expects three in ID order (3,2,1)
@Test
public void testMissingAndReorderedParameters()
{
getClient().missingAndReorderedParameters(1, "2");
// integer and string should be received by handler
assertEquals(getHandler().getLastIntegerParam().get(), (Integer) 1);
assertEquals(getHandler().getLastStringParam().get(), "2");
// bool is not sent, so thrift will fill in the default value for the handler
assertEquals(getHandler().getLastBooleanParam().get(), Boolean.FALSE);
// other params are not sent or received
assertFalse(getHandler().hasLastByteParam());
assertFalse(getHandler().hasLastCustomParam());
}
// Client passes three parameters in ID order (1,2,3), server expects two in ID order (3,2)
@Test
public void testExtraAndReorderedParameters()
{
getClient().extraAndReorderedParameters(1, "2", true);
// bool and string should be received by handler
assertEquals(getHandler().getLastStringParam().get(), "2");
assertEquals(getHandler().getLastBooleanParam().get(), Boolean.TRUE);
// integer is an extra param that is sent, but not received by handler
assertFalse(getHandler().hasLastIntegerParam());
// other params are not sent or received
assertFalse(getHandler().hasLastByteParam());
assertFalse(getHandler().hasLastCustomParam());
}
@Test
public void testMissingInteger()
{
getClient().missingInteger();
// int is not sent, but is synthesized by thrift to the default value (0)
assertEquals(getHandler().getLastIntegerParam().get(), (Integer) 0);
// other params are not sent or received
assertFalse(getHandler().hasLastByteParam());
assertFalse(getHandler().hasLastCustomParam());
assertFalse(getHandler().hasLastStringParam());
assertFalse(getHandler().hasLastBooleanParam());
}
@Test
public void testMissingStruct()
{
getClient().missingStruct();
// struct is not sent, but is synthesized by thrift to the default value (null)
assertFalse(getHandler().getLastCustomParam().isPresent());
// other params are not sent or received
assertFalse(getHandler().hasLastByteParam());
assertFalse(getHandler().hasLastStringParam());
assertFalse(getHandler().hasLastIntegerParam());
assertFalse(getHandler().hasLastBooleanParam());
}
@Test
public void testExtraStruct()
{
getClient().extraStruct(new CustomArgument(1, "2"));
// struct is sent, but is not received by the handler
assertFalse(getHandler().hasLastCustomParam());
// other params are not sent or received
assertFalse(getHandler().hasLastByteParam());
assertFalse(getHandler().hasLastStringParam());
assertFalse(getHandler().hasLastIntegerParam());
assertFalse(getHandler().hasLastBooleanParam());
}
}