blob: 34f9b0eb9119f1d212173d81a4d97788aed0cf8e [file] [log] [blame]
/*
Copyright (c) 2019-2020 Google LLC
Copyright (c) 2013-2018 Nest Labs, Inc.
All rights reserved.
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 nl.Weave.DeviceManager;
import nl.Weave.DataManagement.*;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.EnumSet;
import java.math.BigInteger;
public class TestMain implements WeaveDeviceManager.CompletionHandler, WdmClient.CompletionHandler, GenericTraitUpdatableDataSink.CompletionHandler
{
public class TestFailedException extends RuntimeException
{
public TestFailedException(String testName)
{
super(testName);
}
}
protected byte [] parseHexBinary(String s)
{
byte [] retval = new byte[s.length()/2];
try {
for (int i = 0; i < s.length(); i += 2)
{
retval[i/2] = (byte) Integer.parseInt(s.substring(i, i + 2), 16);
}
}
catch (NumberFormatException nfe)
{
retval = null;
}
return retval;
}
protected String printHexBinary(byte [] inArray)
{
StringBuilder sb = new StringBuilder(inArray.length * 2);
for (byte b: inArray)
{
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static void main(String[] args)
{
TestMain mainObj = new TestMain();
try {
mainObj.RunUnitTests();
}
catch (TestFailedException ex) {
System.exit(-1);
}
}
String TestResult = null;
WeaveDeviceManager DeviceMgr;
long AddNetworkId = -1;
byte[] TestDeviceDescriptor = parseHexBinary(
"95010024002A24010124020125033245" +
"2C041030354241303141433033313330" +
"30334730050818B43000000A91B33006" +
"0618B43001D1832C070A746F70617A2D" +
"393162332C080631323334353618"
);
byte[] FabricConfig = null;
int ExpectedNetworkCount;
void testWdmClientCreateClose(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
mockWdmClient.close();
}
void testWdmClientDataSinkCreateClose(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkCreateClose Test Succeeded");
}
void testWdmClientDataSinkEmptyFlushData(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkEmptyFlushData Test Succeeded");
}
void testWdmClientDataSinkSetFlushData(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkSetFlushData Test Succeeded");
}
void testWdmClientDataSinkRefreshGetDataRefresh(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
long localSettingsTraitVersion = localSettingsTrait.getVersion();
System.out.println("localSettingsTrait GetVersion " + localSettingsTraitVersion);
long testCTraitVersion = testCTrait.getVersion();
System.out.println("testCTrait GetVersion " + testCTraitVersion);
String localeProperty = localSettingsTrait.getString("/1");
System.out.println("GetString " + localeProperty);
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
int tcc_sca = testCTrait.getInt("/3/1");
System.out.println("GetUnsigned" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
int tcd = testCTrait.getInt("/4");
System.out.println("GetUnsigned " + tcd);
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
localSettingsTraitVersion = localSettingsTrait.getVersion();
System.out.println("localSettingsTrait GetVersion " + localSettingsTraitVersion);
testCTraitVersion = testCTrait.getVersion();
System.out.println("testCTrait GetVersion " + testCTraitVersion);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkRefreshGetDataRefresh Test Succeeded");
}
void testWdmClientDataSinkRefreshIndividualGetDataRefresh(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
TestResult = null;
testCTrait.beginRefreshData();
ExpectSuccess("RefreshData");
long testCTraitVersion = testCTrait.getVersion();
System.out.println("testCTrait GetVersion " + testCTraitVersion);
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
int tcc_sca = testCTrait.getInt("/3/1");
System.out.println("GetUnsigned" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
int tcd = testCTrait.getInt("/4");
System.out.println("GetUnsigned " + tcd);
TestResult = null;
testCTrait.beginRefreshData();
ExpectSuccess("RefreshData");
testCTraitVersion = testCTrait.getVersion();
System.out.println("testCTrait GetVersion " + testCTraitVersion);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkRefreshIndividualGetDataRefresh Succeeded");
}
void testWdmClientDataSinkSetFlushRefreshGetData(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Test Succeeded");
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("RefreshData Test Succeeded");
String localeProperty = localSettingsTrait.getString("/1");
System.out.println("GetString " + localeProperty);
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
int tcc_sca = testCTrait.getInt("/3/1");
System.out.println("GetUnsigned" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
int tcd = testCTrait.getInt("/4");
System.out.println("GetUnsigned " + tcd);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkSetFlushRefreshGetData Succeeded");
}
void testWdmClientDataSinkSetFlushRefreshGetBigInteger(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", 6);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Test Succeeded");
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("RefreshData Test Succeeded");
String localeProperty = localSettingsTrait.getString("/1");
System.out.println("GetString " + localeProperty);
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
BigInteger tcc_sca = testCTrait.getBigInteger("/3/1");
System.out.println("getBigInteger" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
BigInteger tcd = testCTrait.getBigInteger("/4");
System.out.println("getBigInteger " + tcd);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkSetFlushRefreshGetBigInteger Succeeded");
}
void testWdmClientDataSinkSetBigIntegerFlushRefreshGetBigInteger(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
BigInteger Element2 = new BigInteger("15");
testCTrait.setSigned("/2", Element2);
BigInteger Element31 = new BigInteger("4294967291"); //-5
testCTrait.setUnsigned("/3/1", Element31);
testCTrait.set("/3/2", false);
BigInteger Element4 = new BigInteger("6");
testCTrait.setUnsigned("/4", Element4);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Test Succeeded");
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("RefreshData Test Succeeded");
String localeProperty = localSettingsTrait.getString("/1");
System.out.println("GetString " + localeProperty);
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
BigInteger tcc_sca = testCTrait.getBigInteger("/3/1");
System.out.println("getBigInteger" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
BigInteger tcd = testCTrait.getBigInteger("/4");
System.out.println("getBigInteger " + tcd);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkSetBigIntegerFlushRefreshGetBigInteger Succeeded");
}
void testWdmClientDataSinkSetRefreshFlushGetData(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
BigInteger self_node_id = new BigInteger("-2");
mockWdmClient.setNodeId(self_node_id);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink localCapabilitiesTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
localCapabilitiesTrait = mockWdmClient.newDataSink(resourceIdentifier, 21, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
localCapabilitiesTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
String[] arr = new String[2];
arr[0] = "zh-TW";
arr[1] = "en-US";
localCapabilitiesTrait.set("/2", arr);
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("RefreshData Test Succeeded");
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Test Succeeded");
String localeProperty = localSettingsTrait.getString("/1");
System.out.println("GetString " + localeProperty);
String[] localeCapabilitiesArray= localCapabilitiesTrait.getStringArray("/2");
System.out.println("GetStringArray " + Arrays.toString(localeCapabilitiesArray));
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
int tcc_sca = testCTrait.getInt("/3/1");
System.out.println("GetUnsigned" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
int tcd = testCTrait.getInt("/4");
System.out.println("GetUnsigned " + tcd);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkSetRefreshFlushGetData Succeeded");
}
void testWdmClientDataSinkResourceIdentifierMakeResTypeIDInt(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
BigInteger self_node_id = new BigInteger("-2");
ResourceIdentifier resourceIdentifier = ResourceIdentifier.make(ResourceIdentifier.RESOURCE_TYPE_RESERVED, self_node_id);
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Test Succeeded");
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("RefreshData Test Succeeded");
String localeProperty = localSettingsTrait.getString("/1");
System.out.println("GetString " + localeProperty);
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
int tcc_sca = testCTrait.getInt("/3/1");
System.out.println("GetUnsigned" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
int tcd = testCTrait.getInt("/4");
System.out.println("GetUnsigned " + tcd);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkResourceIdentifierMakeResTypeIDInt Succeeded");
}
void testWdmClientDataSinkResourceIdentifierMakeResTypeIdBytes(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = ResourceIdentifier.make(ResourceIdentifier.RESOURCE_TYPE_RESERVED, ResourceIdentifier.longToByteArray(-2));
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Test Succeeded");
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("RefreshData Test Succeeded");
String localeProperty = localSettingsTrait.getString("/1");
System.out.println("GetString " + localeProperty);
boolean tca = testCTrait.getBoolean("/1");
System.out.println("GetBoolean " + tca);
int tcb = testCTrait.getInt("/2");
System.out.println("getInt " + tcb);
int tcc_sca = testCTrait.getInt("/3/1");
System.out.println("GetUnsigned" + tcc_sca);
boolean tcc_scb = testCTrait.getBoolean("/3/2");
System.out.println("GetBoolean " + tcc_scb);
int tcd = testCTrait.getInt("/4");
System.out.println("GetUnsigned " + tcd);
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkResourceIdentifierMakeResTypeIdBytes Succeeded");
}
void testWdmClientDataSinkMultipleRefresh(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("Refresh Round1 Test Succeeded");
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("Refresh Round1 Test Succeeded");
TestResult = null;
mockWdmClient.beginRefreshData();
ExpectSuccess("RefreshData");
System.out.println("Refresh Round1 Test Succeeded");
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkMultipleRefresh Test Succeeded");
}
void testWdmClientDataSinkMultipleFlush(WeaveDeviceManager deviceMgr)
{
WdmClientFactory wdmClientFactory = new WdmClientFactory();
WdmClient mockWdmClient = wdmClientFactory.create(deviceMgr);
mockWdmClient.setCompletionHandler(this);
GenericTraitUpdatableDataSink localSettingsTrait;
GenericTraitUpdatableDataSink testCTrait;
ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
localSettingsTrait = mockWdmClient.newDataSink(resourceIdentifier, 20, 0, "/");
testCTrait = mockWdmClient.newDataSink(resourceIdentifier, 593165827, 0, "/");
localSettingsTrait.setCompletionHandler(this);
testCTrait.setCompletionHandler(this);
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Round1 Test Succeeded");
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Round2 Test Succeeded");
localSettingsTrait.set("/1", "en-US");
testCTrait.set("/1", false);
testCTrait.setSigned("/2", 15);
testCTrait.setUnsigned("/3/1", -5);
testCTrait.set("/3/2", false);
testCTrait.setUnsigned("/4", -5);
TestResult = null;
mockWdmClient.beginFlushUpdate();
ExpectSuccess("FlushUpdate");
System.out.println("FlushUpdate Round3 Test Succeeded");
mockWdmClient.close();
mockWdmClient = null;
localSettingsTrait = null;
testCTrait = null;
System.out.println("testWdmClientDataSinkMultipleFlush Succeeded");
}
void RunMockWdmClientTest(WeaveDeviceManager deviceMgr)
{
System.out.println("Run Weave Data Management Start");
testWdmClientDataSinkMultipleRefresh(deviceMgr);
testWdmClientDataSinkMultipleFlush(deviceMgr);
System.out.println("Run Weave Data Management Complete");
}
void RunUnitTests()
{
DeviceMgr = new WeaveDeviceManager();
DeviceMgr.setCompletionHandler(this);
System.out.println("isConnected Test");
TestResult = String.valueOf(DeviceMgr.isConnected());
ExpectResult("isConnected", "false");
System.out.println("isConnected Test Succeeded");
/*
TestResult = null;
System.out.println("ConnectDevice Test");
System.out.println(" Connecting to test device at 127.0.0.1");
DeviceMgr.beginConnectDevice(1, "127.0.0.1");
ExpectSuccess("ConnectDevice");
System.out.println("ConnectDevice Test Succeeded");
System.out.println("isConnected Test");
TestResult = String.valueOf(DeviceMgr.isConnected());
ExpectResult("isConnected", "true");
System.out.println("isConnected Test Succeeded");
System.out.println("Closing WeaveDeviceManager");
DeviceMgr.close();
System.out.println("Setting Rendezvous Address");
DeviceMgr.setRendezvousAddress("127.0.0.1");
*/
TestResult = null;
System.out.println("RendezvousDevice Test");
System.out.println(" Rendezvous with device at 127.0.0.1");
DeviceMgr.beginRendezvousDevice("TEST", generateDefaultCriteria());
ExpectSuccess("RendezvousDevice");
System.out.println("RendezvousDevice Test Succeeded");
System.out.println("deviceId Test");
System.out.format(" Device Id: %d%n", DeviceMgr.deviceId());
System.out.println("deviceId Test Complete");
System.out.println("deviceAddress Test");
System.out.format(" Device Address: %s%n", DeviceMgr.deviceAddress());
System.out.println("deviceAddress Test Complete");
RunMockWdmClientTest(DeviceMgr);
/*
TestResult = null;
System.out.println("Ping Test");
System.out.println(" Pinging device...");
DeviceMgr.beginPing();
ExpectSuccess("Ping");
System.out.println("Ping Test Succeeded");
System.out.println("Closing WeaveDeviceManager");
DeviceMgr.close();
TestResult = null;
System.out.println("ReconnectDevice Test");
System.out.println(" Reconnect with device");
DeviceMgr.beginReconnectDevice();
ExpectSuccess("ReconnectDevice");
System.out.println("ReconnectDevice Test Succeeded");
System.out.println("Closing WeaveDeviceManager");
DeviceMgr.close();
System.out.println("Closing Endpoints");
WeaveDeviceManager.closeEndpoints();
System.out.println("Enabling auto-reconnect");
DeviceMgr.setAutoReconnect(true);
TestResult = null;
System.out.println("ResetConfig Test");
System.out.println(" Resetting device configuration...");
DeviceMgr.beginResetConfig(ResetFlags.All);
ExpectSuccess("ResetConfig");
System.out.println("ResetConfig Test Succeeded");
TestResult = null;
System.out.println("IdentifyDevice Test");
System.out.println(" Identifying device...");
DeviceMgr.beginIdentifyDevice();
ExpectSuccess("IdentifyDevice");
System.out.println("IdentifyDevice Test Succeeded");
TestResult = null;
System.out.println("ScanNetworks Test");
System.out.println(" Scanning for WiFi networks...");
ExpectedNetworkCount = 3;
DeviceMgr.beginScanNetworks(NetworkType.WiFi);
ExpectSuccess("ScanNetworks");
System.out.println("ScanNetworks Test Succeeded");
TestResult = null;
System.out.println("ScanNetworks Test");
System.out.println(" Scanning for Thread networks...");
ExpectedNetworkCount = 1;
DeviceMgr.beginScanNetworks(NetworkType.Thread);
ExpectSuccess("ScanNetworks");
System.out.println("ScanNetworks Test Succeeded");
TestResult = null;
System.out.println("ArmFailSafe Test");
System.out.println(" Arming config fail-safe mechanism...");
int failSafeToken = DeviceMgr.beginArmFailSafe(FailSafeArmMode.New);
ExpectSuccess("ArmFailSafe");
System.out.format(" Fail-safe token = %d%n", failSafeToken);
System.out.println("ArmFailSafe Test Succeeded");
TestResult = null;
System.out.println("AddNetwork Test");
System.out.println(" Adding new Wifi network...");
NetworkInfo networkInfo = NetworkInfo.MakeWiFi("Wireless-Test", WiFiMode.Managed,
WiFiRole.Station, WiFiSecurityType.WEP, "apassword".getBytes());
DeviceMgr.beginAddNetwork(networkInfo);
ExpectSuccess("AddNetwork");
System.out.println("AddNetwork Test Succeeded");
TestResult = null;
System.out.println("AddNetwork Test");
System.out.println(" Adding new Thread network...");
networkInfo = NetworkInfo.MakeThread("Thread-Test",
parseHexBinary("0102030405060708"),
parseHexBinary("0102030405060708090A0B0C0D0E0F10"),
0x1234,
(byte)21);
DeviceMgr.beginAddNetwork(networkInfo);
ExpectSuccess("AddNetwork");
System.out.println("AddNetwork Test Succeeded");
TestResult = null;
System.out.println("GetNetworks Test");
System.out.println(" Getting configured networks...");
ExpectedNetworkCount = 2;
DeviceMgr.beginGetNetworks(GetNetworkFlags.None);
ExpectSuccess("GetNetworks");
System.out.println("GetNetworks Test Succeeded");
TestResult = null;
System.out.println("RemoveNetwork Test");
System.out.format(" Removing WiFi network %d...%n", AddNetworkId);
DeviceMgr.beginRemoveNetwork(AddNetworkId);
ExpectSuccess("RemoveNetwork");
System.out.println("RemoveNetwork Test Succeeded");
TestResult = null;
System.out.println("GetNetworks Test");
System.out.println(" Getting configured networks...");
ExpectedNetworkCount = 1;
DeviceMgr.beginGetNetworks(GetNetworkFlags.None);
ExpectSuccess("GetNetworks");
System.out.println("GetNetworks Test Succeeded");
TestResult = null;
System.out.println("GetWirelessRegulatoryConfig Test");
System.out.println(" Getting wireless regulatory configuration...");
DeviceMgr.beginGetWirelessRegulatoryConfig();
ExpectSuccess("GetWirelessRegulatoryConfig");
System.out.println("GetWirelessRegulatoryConfig Test Succeeded");
TestResult = null;
System.out.println("SetWirelessRegulatoryConfig Test");
System.out.println(" Setting wireless regulatory configuration...");
WirelessRegulatoryConfig regConfig = new WirelessRegulatoryConfig("CA", WirelessOperatingLocation.Indoors);
DeviceMgr.beginSetWirelessRegulatoryConfig(regConfig);
ExpectSuccess("SetWirelessRegulatoryConfig");
System.out.println("SetWirelessRegulatoryConfig Test Succeeded");
TestResult = null;
System.out.println("GetCameraAuthData Test");
System.out.println(" Getting camera auth data...");
DeviceMgr.beginGetCameraAuthData("Ceci n'est pas un nonce.012345670123456789ABCDEF0123456789ABCDEF");
ExpectSuccess("GetCameraAuthData");
System.out.println("GetCameraAuthData Test Succeeded");
TestResult = null;
System.out.println("CreateFabric Test");
System.out.format(" Creating fabric...%n");
DeviceMgr.beginCreateFabric();
ExpectSuccess("CreateFabric");
System.out.println("CreateFabric Test Succeeded");
TestResult = null;
System.out.println("GetFabricConfig Test");
System.out.format(" Getting fabric configuration...%n");
DeviceMgr.beginGetFabricConfig();
ExpectSuccess("GetFabricConfig");
System.out.println("GetFabricConfig Test Succeeded");
TestResult = null;
System.out.println("LeaveFabric Test");
System.out.format(" Leaving fabric...%n");
DeviceMgr.beginLeaveFabric();
ExpectSuccess("LeaveFabric");
System.out.println("LeaveFabric Test Succeeded");
TestResult = null;
System.out.println("JoinExistingFabric Test");
System.out.format(" Joinging existing fabric...%n");
DeviceMgr.beginJoinExistingFabric(FabricConfig);
ExpectSuccess("JoinExistingFabric");
System.out.println("JoinExistingFabric Test Succeeded");
TestResult = null;
System.out.println("DisrmFailSafe Test");
System.out.println(" Disarming config fail-safe mechanism...");
DeviceMgr.beginDisarmFailSafe();
ExpectSuccess("DisrmFailSafe");
System.out.println("DisrmFailSafe Test Succeeded");
System.out.println("Closing WeaveDeviceManager");
DeviceMgr.close();
System.out.println("Decode Device Descriptor Test");
WeaveDeviceDescriptor deviceDesc = DeviceMgr.decodeDeviceDescriptor(TestDeviceDescriptor);
print(deviceDesc, " ");
System.out.println("Decode Device Descriptor Test Succeeded");
System.out.println("ValidatePairingCode Test");
if (!DeviceMgr.isValidPairingCode("3Y0DN8"))
throw new TestFailedException("ValidatePairingCode");
if (DeviceMgr.isValidPairingCode("3Y0D8N"))
throw new TestFailedException("ValidatePairingCode");
if (DeviceMgr.isValidPairingCode("ABCDEFGHI"))
throw new TestFailedException("ValidatePairingCode");
System.out.println("ValidatePairingCode Test Succeeded");
*/
System.out.println("Forcing GC/finalization of WeaveDeviceManager object");
DeviceMgr = null;
for (int i = 0; i < 3; i++) {
System.gc();
System.runFinalization();
try { Thread.sleep(100); }
catch (Exception ex) { }
}
System.out.println("All tests succeeded.");
}
private static IdentifyDeviceCriteria generateDefaultCriteria() {
final IdentifyDeviceCriteria criteria = new IdentifyDeviceCriteria();
criteria.TargetVendorId = 0x235A;
criteria.TargetProductId = IdentifyDeviceCriteria.PRODUCT_WILDCARD_ID_NEST_PROTECT;
criteria.TargetModes = TargetDeviceModes.UserSelectedMode;
return criteria;
}
void ExpectSuccess(String testName)
{
ExpectResult(testName, "Success");
}
void ExpectResult(String testName, String expectedResult)
{
while (TestResult == null)
try { Thread.sleep(100); }
catch (Exception ex) { }
if (!TestResult.equals(expectedResult)) {
if (!expectedResult.equals("Success"))
System.out.format("%s test failed:%n Expected: %s%n Got: %s%n", testName, expectedResult, TestResult);
else
System.out.format("%s test failed: %s%n", testName, TestResult);
throw new TestFailedException(testName);
}
}
public void onConnectDeviceComplete()
{
System.out.println(" Connected to device");
TestResult = "Success";
}
public void onRendezvousDeviceComplete()
{
System.out.println(" Rendezvous device complete");
TestResult = "Success";
}
public void onReconnectDeviceComplete()
{
System.out.println(" Reconnect device complete");
TestResult = "Success";
}
public void onIdentifyDeviceComplete(WeaveDeviceDescriptor deviceDesc)
{
System.out.format(" Identify device complete:%n");
print(deviceDesc, " ");
TestResult = "Success";
}
public void onScanNetworksComplete(NetworkInfo[] networks)
{
System.out.format(" Network scan complete: %d network(s) found%n", networks.length);
print(networks, " ");
if (networks.length == ExpectedNetworkCount)
TestResult = "Success";
else
TestResult = "Incorrect number of networks";
}
public void onGetNetworksComplete(NetworkInfo[] networks)
{
System.out.format(" Get networks complete: %d network(s) found%n", networks.length);
print(networks, " ");
if (networks.length == ExpectedNetworkCount)
TestResult = "Success";
else
TestResult = "Incorrect number of networks";
}
public void onGetCameraAuthDataComplete(String macAddress, String authData)
{
System.out.format(" Get camera auth data complete: mac = %s, auth_data = %s%n", macAddress, authData);
TestResult = "Success";
}
public void onAddNetworkComplete(long networkId)
{
System.out.format(" Add network complete: new network id %d%n", networkId);
TestResult = "Success";
if (AddNetworkId == -1)
AddNetworkId = networkId;
}
public void onUpdateNetworkComplete()
{
}
public void onRemoveNetworkComplete()
{
System.out.format(" Remove network complete%n");
TestResult = "Success";
}
public void onEnableNetworkComplete()
{
}
public void onDisableNetworkComplete()
{
}
public void onTestNetworkConnectivityComplete()
{
}
public void onGetRendezvousModeComplete(EnumSet<RendezvousMode> rendezvousModes)
{
}
public void onSetRendezvousModeComplete()
{
}
public void onGetLastNetworkProvisioningResultComplete()
{
}
public void onRegisterServicePairAccountComplete()
{
}
public void onUnregisterServiceComplete()
{
}
public void onCreateFabricComplete()
{
System.out.println(" Create fabric complete");
TestResult = "Success";
}
public void onLeaveFabricComplete()
{
System.out.println(" Leave fabric complete");
TestResult = "Success";
}
public void onGetFabricConfigComplete(byte[] fabricConfig)
{
System.out.println(" Get fabric config complete");
TestResult = "Success";
FabricConfig = fabricConfig;
}
public void onJoinExistingFabricComplete()
{
System.out.println(" Join existing fabric complete");
TestResult = "Success";
}
public void onArmFailSafeComplete()
{
System.out.println(" Arm fail-safe complete");
TestResult = "Success";
}
public void onDisarmFailSafeComplete()
{
System.out.println(" Disarm fail-safe complete");
TestResult = "Success";
}
public void onResetConfigComplete()
{
System.out.println(" Reset config complete");
TestResult = "Success";
}
public void onPingComplete()
{
System.out.format(" Ping complete%n");
TestResult = "Success";
}
public void onEnableConnectionMonitorComplete()
{
}
public void onDisableConnectionMonitorComplete()
{
}
public void onPairTokenComplete(byte[] pairingTokenBundle)
{
System.out.println(" Pair token complete");
TestResult = "Success";
}
public void onUnpairTokenComplete()
{
System.out.println(" Unpair token complete");
TestResult = "Success";
}
public void onGetWirelessRegulatoryConfigComplete(WirelessRegulatoryConfig regConfig)
{
System.out.println(" Get wireless regulatory config complete");
System.out.format(" RegDomain = %s%n", regConfig.RegDomain);
System.out.format(" OpLocation = %d%n", regConfig.OpLocation.val);
System.out.format(" SupportedRegDomains = ");
for (String regDomain : regConfig.SupportedRegDomains)
System.out.format("%s ", regDomain);
System.out.format("%n");
if (regConfig.RegDomain.equals("US"))
TestResult = "Success";
else
TestResult = "Incorrect regulatory domain";
}
public void onSetWirelessRegulatoryConfigComplete()
{
System.out.format(" Set wireless regulatory config complete:%n");
TestResult = "Success";
}
public void onError(Throwable err)
{
TestResult = err.toString();
}
public void onDeviceEnumerationResponse(WeaveDeviceDescriptor deviceDesc, String deviceAddr)
{
System.out.format(" Device enumeration response received, IP addr = %s%n", deviceAddr);
print(deviceDesc, " ");
}
public void onConnectBleComplete() {}
public void onCloseBleComplete() {}
public void onNotifyWeaveConnectionClosed() {}
public void onRemotePassiveRendezvousComplete() {}
public void onStartSystemTestComplete()
{
}
public void onStopSystemTestComplete()
{
}
public void onFlushUpdateComplete()
{
System.out.println(" Flush Update complete");
TestResult = "Success";
}
public void onRefreshDataComplete()
{
System.out.println(" Refresh Data complete");
TestResult = "Success";
}
public void print(WeaveDeviceDescriptor deviceDesc, String prefix)
{
BigInteger twoToThe64 = BigInteger.ONE.shiftLeft(64);
if (deviceDesc.deviceId != 0)
System.out.format("%sDevice Id: %s%n", prefix, BigInteger.valueOf(deviceDesc.deviceId).add(twoToThe64).mod(twoToThe64).toString(16));
if (deviceDesc.vendorCode != 0)
System.out.format("%sVendor Code: %d%n", prefix, deviceDesc.vendorCode);
if (deviceDesc.productCode != 0)
System.out.format("%sProduct Code: %d%n", prefix, deviceDesc.productCode);
if (deviceDesc.productRevision != 0)
System.out.format("%sProduct Revision: %d%n", prefix, deviceDesc.productRevision);
if (deviceDesc.serialNumber != null)
System.out.format("%sSerial Number: %s%n", prefix, deviceDesc.serialNumber);
if (deviceDesc.softwareVersion != null)
System.out.format("%sSoftware Version: %s%n", prefix, deviceDesc.softwareVersion);
if (deviceDesc.manufacturingDate != null)
System.out.format("%sManufacturing Date: %s%n", prefix, new SimpleDateFormat("yyyy/MM/dd").format(deviceDesc.manufacturingDate.getTime()));
if (deviceDesc.primary802154MACAddress != null)
System.out.format("%sPrimary 802.15.4 MAC Address: %s%n", prefix, printHexBinary(deviceDesc.primary802154MACAddress));
if (deviceDesc.primaryWiFiMACAddress != null)
System.out.format("%sPrimary WiFi MAC Address: %s%n", prefix, printHexBinary(deviceDesc.primaryWiFiMACAddress));
if (deviceDesc.rendezvousWiFiESSID != null)
System.out.format("%sRendezvous WiFi ESSID: %s%n", prefix, deviceDesc.rendezvousWiFiESSID);
if (deviceDesc.pairingCode != null)
System.out.format("%sPairing Code: %s%n", prefix, deviceDesc.pairingCode);
if (deviceDesc.fabricId != 0)
System.out.format("%sFabric Id: %s%n", prefix, BigInteger.valueOf(deviceDesc.fabricId).add(twoToThe64).mod(twoToThe64).toString(16));
System.out.format("%sDevice Features: ", prefix);
for (DeviceFeatures enumVal : deviceDesc.deviceFeatures)
System.out.format("%s ", enumVal);
System.out.format("%n");
}
public void print(NetworkInfo[] networks, String indent)
{
int i = 0;
for (NetworkInfo n : networks) {
System.out.format("%sNetwork %d%n", indent, i);
if (n.NetworkType != NetworkType.NotSpecified)
System.out.format("%s Network Type: %s%n", indent, n.NetworkType.name());
if (n.NetworkId != -1)
System.out.format("%s Network Id: %d%n", indent, n.NetworkId);
if (n.WiFiSSID != null)
System.out.format("%s WiFi SSID: \"%s\"%n", indent, n.WiFiSSID);
if (n.WiFiMode != WiFiMode.NotSpecified)
System.out.format("%s WiFi Mode: %s%n", indent, n.WiFiMode.name());
if (n.WiFiRole != WiFiRole.NotSpecified)
System.out.format("%s WiFi Role: %s%n", indent, n.WiFiRole.name());
if (n.WiFiSecurityType != WiFiSecurityType.NotSpecified)
System.out.format("%s WiFi Security Type: %s%n", indent, n.WiFiSecurityType.name());
if (n.WiFiKey != null)
System.out.format("%s WiFi Key: %s%n", indent, printHexBinary(n.WiFiKey));
if (n.ThreadNetworkName != null)
System.out.format("%s Thread Network Name: \"%s\"%n", indent, n.ThreadNetworkName);
if (n.ThreadExtendedPANId != null)
System.out.format("%s Thread Extended PAN Id: %s%n", indent, printHexBinary(n.ThreadExtendedPANId));
if (n.ThreadNetworkKey != null)
System.out.format("%s Thread Network Key: %s%n", indent, printHexBinary(n.ThreadNetworkKey));
if (n.WirelessSignalStrength != Short.MIN_VALUE)
System.out.format("%s Wireless Signal Strength: %d%n", indent, n.WirelessSignalStrength);
i++;
}
}
}