blob: f4288bb4f63e35afae5bcfff452f5afee6235375 [file] [log] [blame]
package com.android.bluetooth.tests;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.Arrays;
import javax.obex.HeaderSet;
import javax.obex.Operation;
import javax.obex.ResponseCodes;
import junit.framework.Assert;
import android.util.Log;
import com.android.bluetooth.map.BluetoothMapAppParams;
import com.android.bluetooth.map.BluetoothMapConvoListing;
import com.android.bluetooth.map.BluetoothMapConvoListingElement;
import com.android.bluetooth.map.BluetoothMapFolderElement;
import com.android.bluetooth.tests.TestSequencer.OPTYPE;
public class MapStepsConvo {
private static final String TAG = "MapStepsConvo";
protected static void addConvoListingSteps(TestSequencer sequencer) {
SeqStep step;
final int count = 5;
// TODO: As we use the default message database, these tests will fail if the
// database has any content.
// To cope with this for now, the validation is disabled.
/* Request the number of messages */
step = addConvoListingStep(sequencer,
0 /*maxListCount*/,
-1 /*listStartOffset*/,
null /*activityBegin*/,
null /*activityEnd*/,
-1 /*readStatus*/,
null /*recipient*/,
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
/* Add messages and contacts for the entire sequence of tests */
step.mServerPreAction = new MapTestData.MapAddSmsMessages(count);
/* Request the XML for all conversations */
step = addConvoListingStep(sequencer,
-1 /*maxListCount*/,
-1 /*listStartOffset*/,
null /*activityBegin*/,
null /*activityEnd*/,
-1 /*readStatus*/,
null /*recipient*/,
/*nearly impossible to validate due to auto assigned ID values*/
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
step = addConvoListingStep(sequencer,
2 /*maxListCount*/,
-1 /*listStartOffset*/,
null /*activityBegin*/,
null /*activityEnd*/,
-1 /*readStatus*/,
null /*recipient*/,
/*nearly impossible to validate due to auto assigned ID values*/
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
step = addConvoListingStep(sequencer,
2 /*maxListCount*/,
1 /*listStartOffset*/,
null /*activityBegin*/,
null /*activityEnd*/,
-1 /*readStatus*/,
null /*recipient*/,
/*nearly impossible to validate due to auto assigned ID values*/
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
step = addConvoListingStep(sequencer,
3 /*maxListCount*/,
2 /*listStartOffset*/,
null /*activityBegin*/,
null /*activityEnd*/,
-1 /*readStatus*/,
null /*recipient*/,
/*nearly impossible to validate due to auto assigned ID values*/
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
step = addConvoListingStep(sequencer,
5 /*maxListCount*/,
1 /*listStartOffset*/,
MapTestData.TEST_ACTIVITY_BEGIN_STRING /*activityBegin*/,
null /*activityEnd*/,
-1 /*readStatus*/,
null /*recipient*/,
/*nearly impossible to validate due to auto assigned ID values*/
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
step = addConvoListingStep(sequencer,
5 /*maxListCount*/,
0 /*listStartOffset*/,
MapTestData.TEST_ACTIVITY_BEGIN_STRING /*activityBegin*/,
MapTestData.TEST_ACTIVITY_END_STRING /*activityEnd*/,
-1 /*readStatus*/,
null /*recipient*/,
/*nearly impossible to validate due to auto assigned ID values*/
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
step = addConvoListingStep(sequencer,
5 /*maxListCount*/,
1 /*listStartOffset*/,
MapTestData.TEST_ACTIVITY_BEGIN_STRING /*activityBegin*/,
null /*activityEnd*/,
2/* read only */ /*readStatus*/,
null /*recipient*/,
/*nearly impossible to validate due to auto assigned ID values*/
new MapConvoListValidator()
/*new MapConvoListValidator(MapTestData.TEST_NUM_CONTACTS)validator*/);
/* TODO: Test the different combinations of filtering */
}
/**
* Use -1 or null to omit value in request
* @param sequencer
* @param maxListCount
* @param listStartOffset
* @param activityBegin
* @param activityEnd
* @param readStatus -1 omit value, 0 = no filtering, 1 = get unread only, 2 = get read only,
* 3 = 1+2 - hence get none...
* @param recipient substring of the recipient name
* @param validator
* @return a reference to the step added, for further decoration
*/
private static SeqStep addConvoListingStep(TestSequencer sequencer, int maxListCount,
int listStartOffset, String activityBegin, String activityEnd,
int readStatus, String recipient, ISeqStepValidator validator) {
SeqStep step;
BluetoothMapAppParams appParams = new BluetoothMapAppParams();
try {
if(activityBegin != null) {
appParams.setFilterLastActivityBegin(activityBegin);
}
if(activityEnd != null) {
appParams.setFilterLastActivityEnd(activityEnd);
}
if(readStatus != -1) {
appParams.setFilterReadStatus(readStatus);
}
if(recipient != null) {
appParams.setFilterRecipient(recipient);
}
if(maxListCount != -1) {
appParams.setMaxListCount(maxListCount);
}
if(listStartOffset != -1) {
appParams.setStartOffset(listStartOffset);
}
} catch (ParseException e) {
Log.e(TAG, "unable to build appParams", e);
}
step = sequencer.addStep(OPTYPE.GET, null);
HeaderSet hs = new HeaderSet();
hs.setHeader(HeaderSet.TYPE, MapObexLevelTest.TYPE_GET_CONVO_LISTING);
try {
hs.setHeader(HeaderSet.APPLICATION_PARAMETER, appParams.EncodeParams());
} catch (UnsupportedEncodingException e) {
Log.e(TAG, "ERROR", e);
Assert.fail();
}
step.mReqHeaders = hs;
step.mValidator = validator;
return step;
}
/* Functions to validate results */
private static class MapConvoListValidator implements ISeqStepValidator {
final BluetoothMapConvoListing mExpectedListing;
final int mExpectedSize;
public MapConvoListValidator(BluetoothMapConvoListing listing) {
this.mExpectedListing = listing;
this.mExpectedSize = -1;
}
public MapConvoListValidator(int convoListingSize) {
this.mExpectedListing = null;
this.mExpectedSize = convoListingSize;
}
public MapConvoListValidator() {
this.mExpectedListing = null;
this.mExpectedSize = -1;
}
@Override
public boolean validate(SeqStep step, HeaderSet response, Operation op)
throws IOException {
Assert.assertNotNull(op);
op.noBodyHeader();
try {
// For some odd reason, the request will not be send before we start to read the
// reply data, hence we need to do this first?
BluetoothMapConvoListing receivedListing = new BluetoothMapConvoListing();
receivedListing.appendFromXml(op.openInputStream());
response = op.getReceivedHeader();
byte[] appParamsRaw = (byte[])response.getHeader(HeaderSet.APPLICATION_PARAMETER);
Assert.assertNotNull(appParamsRaw);
BluetoothMapAppParams appParams;
appParams = new BluetoothMapAppParams(appParamsRaw);
Assert.assertNotNull(appParams);
Assert.assertNotNull(appParams.getDatabaseIdentifier());
Assert.assertNotSame(BluetoothMapAppParams.INVALID_VALUE_PARAMETER,
appParams.getConvoListingSize());
if(mExpectedSize >= 0) {
Assert.assertSame(mExpectedSize, appParams.getConvoListingSize());
}
if(mExpectedListing != null) {
// Recursively compare
Assert.assertTrue(mExpectedListing.equals(receivedListing));
Assert.assertSame(mExpectedListing.getList().size(),
appParams.getConvoListingSize());
}
int responseCode = op.getResponseCode();
Assert.assertEquals(ResponseCodes.OBEX_HTTP_OK, responseCode);
op.close();
} catch (Exception e) {
Log.e(TAG,"",e);
Assert.fail();
}
return true;
}
}
}