blob: 4a8cf2b39bac77ffb17fa63fb0e340582c0e394b [file] [log] [blame]
/*
*
* Copyright (c) 2020-2021 Project CHIP Authors
* 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.
*/
/**
* @file
* This file implements a test for CHIP Interaction Model Message Def
*
*/
#include <app/MessageDef/CommandDataElement.h>
#include <app/MessageDef/CommandList.h>
#include <app/MessageDef/InvokeCommand.h>
#include <app/MessageDef/ReadRequest.h>
#include <app/MessageDef/ReportData.h>
#include <core/CHIPTLVDebug.hpp>
#include <support/CHIPMem.h>
#include <support/UnitTestRegistration.h>
#include <system/TLVPacketBufferBackingStore.h>
#include <nlunit-test.h>
namespace {
using namespace chip::app;
void TLVPrettyPrinter(const char * aFormat, ...)
{
va_list args;
va_start(args, aFormat);
vprintf(aFormat, args);
va_end(args);
}
CHIP_ERROR DebugPrettyPrint(const chip::System::PacketBufferHandle & aMsgBuf)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVReader reader;
reader.Init(aMsgBuf.Retain());
err = reader.Next();
chip::TLV::Debug::Dump(reader, TLVPrettyPrinter);
if (CHIP_NO_ERROR != err)
{
ChipLogProgress(DataManagement, "DebugPrettyPrint fails with err %d", err);
}
return err;
}
void BuildAttributePath(nlTestSuite * apSuite, AttributePath::Builder & aAttributePathBuilder)
{
CHIP_ERROR err = CHIP_NO_ERROR;
aAttributePathBuilder.NodeId(1).EndpointId(2).ClusterId(3).FieldId(4).ListIndex(5).EndOfAttributePath();
err = aAttributePathBuilder.GetError();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void ParseAttributePath(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
AttributePath::Parser attributePathParser;
CHIP_ERROR err = CHIP_NO_ERROR;
chip::NodeId nodeId = 1;
chip::EndpointId endpointId = 2;
chip::ClusterId clusterId = 3;
uint8_t fieldId = 4;
uint16_t listIndex = 5;
err = attributePathParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = attributePathParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = attributePathParser.GetNodeId(&nodeId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && nodeId == 1);
err = attributePathParser.GetEndpointId(&endpointId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && endpointId == 2);
err = attributePathParser.GetClusterId(&clusterId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && clusterId == 3);
err = attributePathParser.GetFieldId(&fieldId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && fieldId == 4);
err = attributePathParser.GetListIndex(&listIndex);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && listIndex == 5);
}
void BuildAttributePathList(nlTestSuite * apSuite, AttributePathList::Builder & aAttributePathListBuilder)
{
AttributePath::Builder attributePathBuilder = aAttributePathListBuilder.CreateAttributePathBuilder();
NL_TEST_ASSERT(apSuite, attributePathBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributePath(apSuite, attributePathBuilder);
aAttributePathListBuilder.EndOfAttributePathList();
NL_TEST_ASSERT(apSuite, aAttributePathListBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseAttributePathList(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributePathList::Parser attributePathListParser;
AttributePath::Parser attributePathParser;
err = attributePathListParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = attributePathListParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildEventPath(nlTestSuite * apSuite, EventPath::Builder & aEventPathBuilder)
{
CHIP_ERROR err = CHIP_NO_ERROR;
aEventPathBuilder.NodeId(1).EndpointId(2).ClusterId(3).EventId(4).EndOfEventPath();
err = aEventPathBuilder.GetError();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void ParseEventPath(nlTestSuite * apSuite, EventPath::Parser & aEventPathParser)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::NodeId nodeId = 1;
chip::EndpointId endpointId = 2;
chip::ClusterId clusterId = 3;
chip::EventId eventId = 4;
err = aEventPathParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = aEventPathParser.GetNodeId(&nodeId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && nodeId == 1);
err = aEventPathParser.GetEndpointId(&endpointId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && endpointId == 2);
err = aEventPathParser.GetClusterId(&clusterId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && clusterId == 3);
err = aEventPathParser.GetEventId(&eventId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && eventId == 4);
}
void BuildEventPathList(nlTestSuite * apSuite, EventPathList::Builder & aEventPathListBuilder)
{
EventPath::Builder eventPathBuilder = aEventPathListBuilder.CreateEventPathBuilder();
NL_TEST_ASSERT(apSuite, eventPathBuilder.GetError() == CHIP_NO_ERROR);
BuildEventPath(apSuite, eventPathBuilder);
aEventPathListBuilder.EndOfEventPathList();
NL_TEST_ASSERT(apSuite, aEventPathListBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseEventPathList(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
EventPathList::Parser eventPathListParser;
err = eventPathListParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = eventPathListParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildCommandPath(nlTestSuite * apSuite, CommandPath::Builder & aCommandPathBuilder)
{
aCommandPathBuilder.EndpointId(1).ClusterId(3).CommandId(4).EndOfCommandPath();
NL_TEST_ASSERT(apSuite, aCommandPathBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseCommandPath(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
CommandPath::Parser commandPathParser;
chip::EndpointId endpointId = 0;
chip::ClusterId clusterId = 0;
chip::CommandId commandId = 0;
err = commandPathParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = commandPathParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = commandPathParser.GetEndpointId(&endpointId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && endpointId == 1);
err = commandPathParser.GetClusterId(&clusterId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && clusterId == 3);
err = commandPathParser.GetCommandId(&commandId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && commandId == 4);
}
void BuildEventDataElement(nlTestSuite * apSuite, EventDataElement::Builder & aEventDataElementBuilder)
{
CHIP_ERROR err = CHIP_NO_ERROR;
EventPath::Builder eventPathBuilder = aEventDataElementBuilder.CreateEventPathBuilder();
NL_TEST_ASSERT(apSuite, eventPathBuilder.GetError() == CHIP_NO_ERROR);
BuildEventPath(apSuite, eventPathBuilder);
aEventDataElementBuilder.PriorityLevel(2)
.Number(3)
.UTCTimestamp(4)
.SystemTimestamp(5)
.DeltaUTCTimestamp(6)
.DeltaSystemTimestamp(7);
err = aEventDataElementBuilder.GetError();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
// Construct test event data
{
chip::TLV::TLVWriter * pWriter = aEventDataElementBuilder.GetWriter();
chip::TLV::TLVType dummyType = chip::TLV::kTLVType_NotSpecified;
err =
pWriter->StartContainer(chip::TLV::ContextTag(EventDataElement::kCsTag_Data), chip::TLV::kTLVType_Structure, dummyType);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = pWriter->PutBoolean(chip::TLV::ContextTag(1), true);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = pWriter->EndContainer(dummyType);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
aEventDataElementBuilder.EndOfEventDataElement();
}
void ParseEventDataElement(nlTestSuite * apSuite, EventDataElement::Parser & aEventDataElementParser)
{
CHIP_ERROR err = CHIP_NO_ERROR;
uint8_t importanceLevel = 0;
uint64_t number = 0;
uint64_t uTCTimestamp = 0;
uint64_t systemTimestamp = 0;
uint64_t deltaUTCTimestamp = 0;
uint64_t deltaSystemTimestamp = 0;
err = aEventDataElementParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
{
{
EventPath::Parser eventPath;
err = aEventDataElementParser.GetEventPath(&eventPath);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
err = aEventDataElementParser.GetPriorityLevel(&importanceLevel);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && importanceLevel == 2);
err = aEventDataElementParser.GetNumber(&number);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && number == 3);
err = aEventDataElementParser.GetUTCTimestamp(&uTCTimestamp);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && uTCTimestamp == 4);
err = aEventDataElementParser.GetSystemTimestamp(&systemTimestamp);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && systemTimestamp == 5);
err = aEventDataElementParser.GetDeltaUTCTimestamp(&deltaUTCTimestamp);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && deltaUTCTimestamp == 6);
err = aEventDataElementParser.GetDeltaSystemTimestamp(&deltaSystemTimestamp);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && deltaSystemTimestamp == 7);
{
chip::TLV::TLVReader reader;
bool val = false;
chip::TLV::TLVType container;
aEventDataElementParser.GetData(&reader);
err = reader.EnterContainer(container);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reader.Get(val);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && val);
err = reader.ExitContainer(container);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
}
}
void BuildEventList(nlTestSuite * apSuite, EventList::Builder & aEventListBuilder)
{
EventDataElement::Builder eventDataElementBuilder = aEventListBuilder.CreateEventBuilder();
NL_TEST_ASSERT(apSuite, eventDataElementBuilder.GetError() == CHIP_NO_ERROR);
BuildEventDataElement(apSuite, eventDataElementBuilder);
aEventListBuilder.EndOfEventList();
NL_TEST_ASSERT(apSuite, aEventListBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseEventList(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
EventList::Parser eventListParser;
err = eventListParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = eventListParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildStatusElement(nlTestSuite * apSuite, StatusElement::Builder & aStatusElementBuilder)
{
CHIP_ERROR err = CHIP_NO_ERROR;
aStatusElementBuilder.EncodeStatusElement(1, 2, 3, 4).EndOfStatusElement();
err = aStatusElementBuilder.GetError();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void ParseStatusElement(nlTestSuite * apSuite, StatusElement::Parser & aStatusElementParser)
{
CHIP_ERROR err = CHIP_NO_ERROR;
StatusElement::Parser StatusElementParser;
uint16_t generalCode = 0;
uint32_t protocolId = 0;
uint16_t protocolCode = 0;
chip::ClusterId clusterId = 0;
err = aStatusElementParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = aStatusElementParser.DecodeStatusElement(&generalCode, &protocolId, &protocolCode, &clusterId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && generalCode == 1 && protocolId == 2 && protocolCode == 3 && clusterId == 4);
}
void BuildAttributeStatusElement(nlTestSuite * apSuite, AttributeStatusElement::Builder & aAttributeStatusElementBuilder)
{
AttributePath::Builder attributePathBuilder = aAttributeStatusElementBuilder.CreateAttributePathBuilder();
NL_TEST_ASSERT(apSuite, attributePathBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributePath(apSuite, attributePathBuilder);
StatusElement::Builder statusElementBuilder = aAttributeStatusElementBuilder.CreateStatusElementBuilder();
NL_TEST_ASSERT(apSuite, statusElementBuilder.GetError() == CHIP_NO_ERROR);
BuildStatusElement(apSuite, statusElementBuilder);
aAttributeStatusElementBuilder.EndOfAttributeStatusElement();
NL_TEST_ASSERT(apSuite, aAttributeStatusElementBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseAttributeStatusElement(nlTestSuite * apSuite, AttributeStatusElement::Parser & aAttributeStatusElementParser)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributePath::Parser attributePathParser;
StatusElement::Parser statusElementParser;
err = aAttributeStatusElementParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = aAttributeStatusElementParser.GetAttributePath(&attributePathParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = aAttributeStatusElementParser.GetStatusElement(&statusElementParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildAttributeStatusList(nlTestSuite * apSuite, AttributeStatusList::Builder & aAttributeStatusListBuilder)
{
AttributeStatusElement::Builder aAttributeStatusElementBuilder = aAttributeStatusListBuilder.CreateAttributeStatusBuilder();
NL_TEST_ASSERT(apSuite, aAttributeStatusListBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributeStatusElement(apSuite, aAttributeStatusElementBuilder);
aAttributeStatusListBuilder.EndOfAttributeStatusList();
NL_TEST_ASSERT(apSuite, aAttributeStatusListBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseAttributeStatusList(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributeStatusList::Parser attributeStatusParser;
err = attributeStatusParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = attributeStatusParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildAttributeDataElement(nlTestSuite * apSuite, AttributeDataElement::Builder & aAttributeDataElementBuilder)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributePath::Builder attributePathBuilder = aAttributeDataElementBuilder.CreateAttributePathBuilder();
NL_TEST_ASSERT(apSuite, aAttributeDataElementBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributePath(apSuite, attributePathBuilder);
aAttributeDataElementBuilder.DataVersion(2);
err = aAttributeDataElementBuilder.GetError();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
// Construct attribute data
{
chip::TLV::TLVWriter * pWriter = aAttributeDataElementBuilder.GetWriter();
chip::TLV::TLVType dummyType = chip::TLV::kTLVType_NotSpecified;
err = pWriter->StartContainer(chip::TLV::ContextTag(AttributeDataElement::kCsTag_Data), chip::TLV::kTLVType_Structure,
dummyType);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = pWriter->PutBoolean(chip::TLV::ContextTag(1), true);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = pWriter->EndContainer(dummyType);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
aAttributeDataElementBuilder.MoreClusterData(true);
err = aAttributeDataElementBuilder.GetError();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
aAttributeDataElementBuilder.EndOfAttributeDataElement();
NL_TEST_ASSERT(apSuite, aAttributeDataElementBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseAttributeDataElement(nlTestSuite * apSuite, AttributeDataElement::Parser & aAttributeDataElementParser)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributePath::Parser attributePathParser;
StatusElement::Parser statusElementParser;
chip::DataVersion version = 0;
bool moreClusterDataFlag = false;
err = aAttributeDataElementParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = aAttributeDataElementParser.GetAttributePath(&attributePathParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = aAttributeDataElementParser.GetDataVersion(&version);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && version == 2);
{
chip::TLV::TLVReader reader;
bool val = false;
chip::TLV::TLVType container;
aAttributeDataElementParser.GetData(&reader);
err = reader.EnterContainer(container);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reader.Get(val);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && val);
err = reader.ExitContainer(container);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
err = aAttributeDataElementParser.GetMoreClusterDataFlag(&moreClusterDataFlag);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && moreClusterDataFlag);
}
void BuildAttributeDataList(nlTestSuite * apSuite, AttributeDataList::Builder & aAttributeDataListBuilder)
{
AttributeDataElement::Builder attributeDataElementBuilder = aAttributeDataListBuilder.CreateAttributeDataElementBuilder();
NL_TEST_ASSERT(apSuite, aAttributeDataListBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributeDataElement(apSuite, attributeDataElementBuilder);
aAttributeDataListBuilder.EndOfAttributeDataList();
NL_TEST_ASSERT(apSuite, aAttributeDataListBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseAttributeDataList(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributeDataList::Parser attributeDataListParser;
err = attributeDataListParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = attributeDataListParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildAttributeDataVersionList(nlTestSuite * apSuite, AttributeDataVersionList::Builder & aAttributeDataVersionListBuilder)
{
aAttributeDataVersionListBuilder.AddVersion(1);
aAttributeDataVersionListBuilder.EndOfAttributeDataVersionList();
NL_TEST_ASSERT(apSuite, aAttributeDataVersionListBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseAttributeDataVersionList(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::DataVersion version;
AttributeDataVersionList::Parser attributeDataVersionListParser;
err = attributeDataVersionListParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = attributeDataVersionListParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
attributeDataVersionListParser.GetVersion(&version);
}
void BuildCommandDataElement(nlTestSuite * apSuite, CommandDataElement::Builder & aCommandDataElementBuilder)
{
CHIP_ERROR err = CHIP_NO_ERROR;
CommandPath::Builder commandPathBuilder = aCommandDataElementBuilder.CreateCommandPathBuilder();
NL_TEST_ASSERT(apSuite, aCommandDataElementBuilder.GetError() == CHIP_NO_ERROR);
BuildCommandPath(apSuite, commandPathBuilder);
// Construct command data
{
chip::TLV::TLVWriter * pWriter = aCommandDataElementBuilder.GetWriter();
chip::TLV::TLVType dummyType = chip::TLV::kTLVType_NotSpecified;
err = pWriter->StartContainer(chip::TLV::ContextTag(CommandDataElement::kCsTag_Data), chip::TLV::kTLVType_Structure,
dummyType);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = pWriter->PutBoolean(chip::TLV::ContextTag(1), true);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = pWriter->EndContainer(dummyType);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
aCommandDataElementBuilder.EndOfCommandDataElement();
NL_TEST_ASSERT(apSuite, aCommandDataElementBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseCommandDataElement(nlTestSuite * apSuite, CommandDataElement::Parser & aCommandDataElementParser)
{
CHIP_ERROR err = CHIP_NO_ERROR;
CommandPath::Parser commandPathParser;
err = aCommandDataElementParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = aCommandDataElementParser.GetCommandPath(&commandPathParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
{
chip::TLV::TLVReader reader;
bool val = false;
chip::TLV::TLVType container;
aCommandDataElementParser.GetData(&reader);
err = reader.EnterContainer(container);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reader.Get(val);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && val);
err = reader.ExitContainer(container);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
}
void BuildCommandList(nlTestSuite * apSuite, CommandList::Builder & aCommandListBuilder)
{
CommandDataElement::Builder commandDataElementBuilder = aCommandListBuilder.CreateCommandDataElementBuilder();
NL_TEST_ASSERT(apSuite, aCommandListBuilder.GetError() == CHIP_NO_ERROR);
BuildCommandDataElement(apSuite, commandDataElementBuilder);
aCommandListBuilder.EndOfCommandList();
NL_TEST_ASSERT(apSuite, aCommandListBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseCommandList(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
CommandList::Parser commandListParser;
commandListParser.Init(aReader);
err = commandListParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildReportData(nlTestSuite * apSuite, chip::TLV::TLVWriter & aWriter)
{
CHIP_ERROR err = CHIP_NO_ERROR;
ReportData::Builder reportDataBuilder;
err = reportDataBuilder.Init(&aWriter);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
reportDataBuilder.SuppressResponse(true).SubscriptionId(2);
NL_TEST_ASSERT(apSuite, reportDataBuilder.GetError() == CHIP_NO_ERROR);
AttributeStatusList::Builder attributeStatusList = reportDataBuilder.CreateAttributeStatusListBuilder();
NL_TEST_ASSERT(apSuite, reportDataBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributeStatusList(apSuite, attributeStatusList);
AttributeDataList::Builder attributeDataList = reportDataBuilder.CreateAttributeDataListBuilder();
NL_TEST_ASSERT(apSuite, reportDataBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributeDataList(apSuite, attributeDataList);
EventList::Builder eventList = reportDataBuilder.CreateEventDataListBuilder();
NL_TEST_ASSERT(apSuite, reportDataBuilder.GetError() == CHIP_NO_ERROR);
BuildEventList(apSuite, eventList);
reportDataBuilder.MoreChunkedMessages(true);
NL_TEST_ASSERT(apSuite, reportDataBuilder.GetError() == CHIP_NO_ERROR);
reportDataBuilder.EndOfReportData();
NL_TEST_ASSERT(apSuite, reportDataBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseReportData(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
ReportData::Parser reportDataParser;
bool suppressResponse = false;
uint64_t subscriptionId = 0;
AttributeStatusList::Parser attributeStatusListParser;
AttributeDataList::Parser attributeDataListParser;
EventList::Parser eventListParser;
bool moreChunkedMessages = false;
reportDataParser.Init(aReader);
err = reportDataParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reportDataParser.GetSuppressResponse(&suppressResponse);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && suppressResponse);
err = reportDataParser.GetSubscriptionId(&subscriptionId);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && subscriptionId == 2);
err = reportDataParser.GetAttributeStatusList(&attributeStatusListParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reportDataParser.GetAttributeDataList(&attributeDataListParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reportDataParser.GetEventDataList(&eventListParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = reportDataParser.GetMoreChunkedMessages(&moreChunkedMessages);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR && moreChunkedMessages);
}
void BuildInvokeCommand(nlTestSuite * apSuite, chip::TLV::TLVWriter & aWriter)
{
CHIP_ERROR err = CHIP_NO_ERROR;
InvokeCommand::Builder invokeCommandBuilder;
err = invokeCommandBuilder.Init(&aWriter);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
CommandList::Builder commandList = invokeCommandBuilder.CreateCommandListBuilder();
NL_TEST_ASSERT(apSuite, invokeCommandBuilder.GetError() == CHIP_NO_ERROR);
BuildCommandList(apSuite, commandList);
invokeCommandBuilder.EndOfInvokeCommand();
NL_TEST_ASSERT(apSuite, invokeCommandBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseInvokeCommand(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
InvokeCommand::Parser invokeCommandParser;
CommandList::Parser commandListParser;
err = invokeCommandParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = invokeCommandParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = invokeCommandParser.GetCommandList(&commandListParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
}
void BuildReadRequest(nlTestSuite * apSuite, chip::TLV::TLVWriter & aWriter)
{
CHIP_ERROR err = CHIP_NO_ERROR;
ReadRequest::Builder readRequestBuilder;
err = readRequestBuilder.Init(&aWriter);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
AttributePathList::Builder attributePathList = readRequestBuilder.CreateAttributePathListBuilder();
NL_TEST_ASSERT(apSuite, readRequestBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributePathList(apSuite, attributePathList);
EventPathList::Builder eventPathList = readRequestBuilder.CreateEventPathListBuilder();
NL_TEST_ASSERT(apSuite, readRequestBuilder.GetError() == CHIP_NO_ERROR);
BuildEventPathList(apSuite, eventPathList);
AttributeDataVersionList::Builder attributeDataVersionList = readRequestBuilder.CreateAttributeDataVersionListBuilder();
NL_TEST_ASSERT(apSuite, readRequestBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributeDataVersionList(apSuite, attributeDataVersionList);
readRequestBuilder.EventNumber(1);
NL_TEST_ASSERT(apSuite, readRequestBuilder.GetError() == CHIP_NO_ERROR);
readRequestBuilder.EndOfReadRequest();
NL_TEST_ASSERT(apSuite, readRequestBuilder.GetError() == CHIP_NO_ERROR);
}
void ParseReadRequest(nlTestSuite * apSuite, chip::TLV::TLVReader & aReader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
ReadRequest::Parser readRequestParser;
AttributePathList::Parser attributePathListParser;
EventPathList::Parser eventPathListParser;
AttributeDataVersionList::Parser attributeDataVersionListParser;
uint64_t eventNumber;
err = readRequestParser.Init(aReader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = readRequestParser.CheckSchemaValidity();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = readRequestParser.GetAttributePathList(&attributePathListParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = readRequestParser.GetEventPathList(&eventPathListParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = readRequestParser.GetAttributeDataVersionList(&attributeDataVersionListParser);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = readRequestParser.GetEventNumber(&eventNumber);
NL_TEST_ASSERT(apSuite, eventNumber == 1 && err == CHIP_NO_ERROR);
}
void AttributePathTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributePath::Builder attributePathBuilder;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
attributePathBuilder.Init(&writer);
BuildAttributePath(apSuite, attributePathBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseAttributePath(apSuite, reader);
}
void AttributePathListTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
AttributePathList::Builder attributePathListBuilder;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
err = attributePathListBuilder.Init(&writer);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
BuildAttributePathList(apSuite, attributePathListBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseAttributePathList(apSuite, reader);
}
void EventPathTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
EventPath::Parser eventPathParser;
EventPath::Builder eventPathBuilder;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
eventPathBuilder.Init(&writer);
BuildEventPath(apSuite, eventPathBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
eventPathParser.Init(reader);
ParseEventPath(apSuite, eventPathParser);
}
void EventPathListTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
EventPathList::Builder eventPathListBuilder;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
err = eventPathListBuilder.Init(&writer);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
BuildEventPathList(apSuite, eventPathListBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseEventPathList(apSuite, reader);
}
void CommandPathTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
CommandPath::Builder commandPathBuilder;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
err = commandPathBuilder.Init(&writer);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
BuildCommandPath(apSuite, commandPathBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseCommandPath(apSuite, reader);
}
void EventDataElementTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
EventDataElement::Builder eventDataElementBuilder;
EventDataElement::Parser eventDataElementParser;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
eventDataElementBuilder.Init(&writer);
BuildEventDataElement(apSuite, eventDataElementBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
eventDataElementParser.Init(reader);
ParseEventDataElement(apSuite, eventDataElementParser);
}
void EventListTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
EventList::Builder eventListBuilder;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
eventListBuilder.Init(&writer);
BuildEventList(apSuite, eventListBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseEventList(apSuite, reader);
}
void StatusElementTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
StatusElement::Builder statusElementBuilder;
StatusElement::Parser statusElementParser;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
statusElementBuilder.Init(&writer);
BuildStatusElement(apSuite, statusElementBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
statusElementParser.Init(reader);
ParseStatusElement(apSuite, statusElementParser);
}
void AttributeStatusElementTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributeStatusElement::Builder attributeStatusElementBuilder;
AttributeStatusElement::Parser attributeStatusElementParser;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
attributeStatusElementBuilder.Init(&writer);
BuildAttributeStatusElement(apSuite, attributeStatusElementBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
attributeStatusElementParser.Init(reader);
ParseAttributeStatusElement(apSuite, attributeStatusElementParser);
}
void AttributeStatusListTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
AttributeStatusList::Builder attributeStatusListBuilder;
err = attributeStatusListBuilder.Init(&writer);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
BuildAttributeStatusList(apSuite, attributeStatusListBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseAttributeStatusList(apSuite, reader);
}
void AttributeDataElementTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
AttributeDataElement::Builder attributeDataElementBuilder;
AttributeDataElement::Parser attributeDataElementParser;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
attributeDataElementBuilder.Init(&writer);
BuildAttributeDataElement(apSuite, attributeDataElementBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
attributeDataElementParser.Init(reader);
ParseAttributeDataElement(apSuite, attributeDataElementParser);
}
void AttributeDataListTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
AttributeDataList::Builder attributeDataListBuilder;
attributeDataListBuilder.Init(&writer);
BuildAttributeDataList(apSuite, attributeDataListBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseAttributeDataList(apSuite, reader);
}
void AttributeDataVersionListTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
AttributeDataVersionList::Builder attributeDataVersionListBuilder;
attributeDataVersionListBuilder.Init(&writer);
BuildAttributeDataVersionList(apSuite, attributeDataVersionListBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseAttributeDataVersionList(apSuite, reader);
}
void CommandDataElementTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
CommandDataElement::Builder commandDataElementBuilder;
CommandDataElement::Parser commandDataElementParser;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
commandDataElementBuilder.Init(&writer);
BuildCommandDataElement(apSuite, commandDataElementBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
commandDataElementParser.Init(reader);
ParseCommandDataElement(apSuite, commandDataElementParser);
}
void CommandListTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
CommandList::Builder commandListBuilder;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
commandListBuilder.Init(&writer);
BuildCommandList(apSuite, commandListBuilder);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseCommandList(apSuite, reader);
}
void ReportDataTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
BuildReportData(apSuite, writer);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseReportData(apSuite, reader);
}
void InvokeCommandTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
BuildInvokeCommand(apSuite, writer);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseInvokeCommand(apSuite, reader);
}
void ReadRequestTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
BuildReadRequest(apSuite, writer);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
ParseReadRequest(apSuite, reader);
}
void CheckPointRollbackTest(nlTestSuite * apSuite, void * apContext)
{
CHIP_ERROR err = CHIP_NO_ERROR;
size_t NumDataElement = 0;
chip::System::PacketBufferTLVWriter writer;
chip::System::PacketBufferTLVReader reader;
AttributeDataList::Parser attributeDataListParser;
chip::TLV::TLVWriter checkpoint;
writer.Init(chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSize));
AttributeDataList::Builder attributeDataListBuilder;
attributeDataListBuilder.Init(&writer);
// encode one attribute element
AttributeDataElement::Builder attributeDataElementBuilder1 = attributeDataListBuilder.CreateAttributeDataElementBuilder();
NL_TEST_ASSERT(apSuite, attributeDataListBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributeDataElement(apSuite, attributeDataElementBuilder1);
// checkpoint
attributeDataListBuilder.Checkpoint(checkpoint);
// encode another attribute element
AttributeDataElement::Builder attributeDataElementBuilder2 = attributeDataListBuilder.CreateAttributeDataElementBuilder();
NL_TEST_ASSERT(apSuite, attributeDataListBuilder.GetError() == CHIP_NO_ERROR);
BuildAttributeDataElement(apSuite, attributeDataElementBuilder2);
// rollback to previous checkpoint
attributeDataListBuilder.Rollback(checkpoint);
attributeDataListBuilder.EndOfAttributeDataList();
NL_TEST_ASSERT(apSuite, attributeDataListBuilder.GetError() == CHIP_NO_ERROR);
chip::System::PacketBufferHandle buf;
err = writer.Finalize(&buf);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
DebugPrettyPrint(buf);
reader.Init(std::move(buf));
err = reader.Next();
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
err = attributeDataListParser.Init(reader);
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
attributeDataListParser.CheckSchemaValidity();
while (CHIP_NO_ERROR == (err = attributeDataListParser.Next()))
{
++NumDataElement;
}
NL_TEST_ASSERT(apSuite, NumDataElement == 1);
}
/**
* Test Suite. It lists all the test functions.
*/
// clang-format off
const nlTest sTests[] =
{
NL_TEST_DEF("AttributePathTest", AttributePathTest),
NL_TEST_DEF("AttributePathListTest", AttributePathListTest),
NL_TEST_DEF("EventPathTest", EventPathTest),
NL_TEST_DEF("EventPathListTest", EventPathListTest),
NL_TEST_DEF("CommandPathTest", CommandPathTest),
NL_TEST_DEF("EventDataElementTest", EventDataElementTest),
NL_TEST_DEF("EventListTest", EventListTest),
NL_TEST_DEF("StatusElementTest", StatusElementTest),
NL_TEST_DEF("AttributeStatusElementTest", AttributeStatusElementTest),
NL_TEST_DEF("AttributeStatusListTest", AttributeStatusListTest),
NL_TEST_DEF("AttributeDataElementTest", AttributeDataElementTest),
NL_TEST_DEF("AttributeDataListTest", AttributeDataListTest),
NL_TEST_DEF("AttributeDataVersionListTest", AttributeDataVersionListTest),
NL_TEST_DEF("CommandDataElementTest", CommandDataElementTest),
NL_TEST_DEF("CommandListTest", CommandListTest),
NL_TEST_DEF("ReportDataTest", ReportDataTest),
NL_TEST_DEF("InvokeCommandTest", InvokeCommandTest),
NL_TEST_DEF("ReadRequestTest", ReadRequestTest),
NL_TEST_DEF("CheckPointRollbackTest", CheckPointRollbackTest),
NL_TEST_SENTINEL()
};
// clang-format on
} // namespace
/**
* Set up the test suite.
*/
static int TestSetup(void * inContext)
{
CHIP_ERROR error = chip::Platform::MemoryInit();
if (error != CHIP_NO_ERROR)
return FAILURE;
return SUCCESS;
}
/**
* Tear down the test suite.
*/
static int TestTeardown(void * inContext)
{
chip::Platform::MemoryShutdown();
return SUCCESS;
}
int TestMessageDef()
{
// clang-format off
nlTestSuite theSuite =
{
"MessageDef",
&sTests[0],
TestSetup,
TestTeardown,
};
// clang-format on
nlTestRunner(&theSuite, nullptr);
return (nlTestRunnerStats(&theSuite));
}
CHIP_REGISTER_TEST_SUITE(TestMessageDef)