1 /*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
18 #include <gtest/gtest.h>
19
20 #include "VehicleHalTestUtils.h"
21 #include "vhal_v2_0/VmsUtils.h"
22
23 namespace android {
24 namespace hardware {
25 namespace automotive {
26 namespace vehicle {
27 namespace V2_0 {
28 namespace vms {
29
30 namespace {
31
TEST(VmsUtilsTest,subscribeMessage)32 TEST(VmsUtilsTest, subscribeMessage) {
33 VmsLayer layer(1, 0, 2);
34 auto message = createSubscribeMessage(layer);
35 ASSERT_NE(message, nullptr);
36 EXPECT_TRUE(isValidVmsMessage(*message));
37 EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
38 EXPECT_EQ(message->value.int32Values.size(), 0x4ul);
39 EXPECT_EQ(parseMessageType(*message), VmsMessageType::SUBSCRIBE);
40
41 // Layer
42 EXPECT_EQ(message->value.int32Values[1], 1);
43 EXPECT_EQ(message->value.int32Values[2], 0);
44 EXPECT_EQ(message->value.int32Values[3], 2);
45 }
46
TEST(VmsUtilsTest,unsubscribeMessage)47 TEST(VmsUtilsTest, unsubscribeMessage) {
48 VmsLayer layer(1, 0, 2);
49 auto message = createUnsubscribeMessage(layer);
50 ASSERT_NE(message, nullptr);
51 EXPECT_TRUE(isValidVmsMessage(*message));
52 EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
53 EXPECT_EQ(message->value.int32Values.size(), 0x4ul);
54 EXPECT_EQ(parseMessageType(*message), VmsMessageType::UNSUBSCRIBE);
55
56 // Layer
57 EXPECT_EQ(message->value.int32Values[1], 1);
58 EXPECT_EQ(message->value.int32Values[2], 0);
59 EXPECT_EQ(message->value.int32Values[3], 2);
60 }
61
TEST(VmsUtilsTest,singleOfferingMessage)62 TEST(VmsUtilsTest, singleOfferingMessage) {
63 std::vector<VmsLayerOffering> offering = {VmsLayerOffering(VmsLayer(1, 0, 2))};
64 auto message = createOfferingMessage(offering);
65 ASSERT_NE(message, nullptr);
66 EXPECT_TRUE(isValidVmsMessage(*message));
67 EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
68 EXPECT_EQ(message->value.int32Values.size(), 0x6ul);
69 EXPECT_EQ(parseMessageType(*message), VmsMessageType::OFFERING);
70
71 // Number of layer offerings
72 EXPECT_EQ(message->value.int32Values[1], 1);
73
74 // Layer
75 EXPECT_EQ(message->value.int32Values[2], 1);
76 EXPECT_EQ(message->value.int32Values[3], 0);
77 EXPECT_EQ(message->value.int32Values[4], 2);
78
79 // Number of dependencies
80 EXPECT_EQ(message->value.int32Values[5], 0);
81 }
82
TEST(VmsUtilsTest,offeringWithDependencies)83 TEST(VmsUtilsTest, offeringWithDependencies) {
84 VmsLayer layer(1, 0, 2);
85 std::vector<VmsLayer> dependencies = {VmsLayer(2, 0, 2)};
86 std::vector<VmsLayerOffering> offering = {VmsLayerOffering(layer, dependencies)};
87 auto message = createOfferingMessage(offering);
88 ASSERT_NE(message, nullptr);
89 EXPECT_TRUE(isValidVmsMessage(*message));
90 EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
91 EXPECT_EQ(message->value.int32Values.size(), 0x9ul);
92 EXPECT_EQ(parseMessageType(*message), VmsMessageType::OFFERING);
93
94 // Number of layer offerings
95 EXPECT_EQ(message->value.int32Values[1], 1);
96
97 // Layer
98 EXPECT_EQ(message->value.int32Values[2], 1);
99 EXPECT_EQ(message->value.int32Values[3], 0);
100 EXPECT_EQ(message->value.int32Values[4], 2);
101
102 // Number of dependencies
103 EXPECT_EQ(message->value.int32Values[5], 1);
104
105 // Dependency 1
106 EXPECT_EQ(message->value.int32Values[6], 2);
107 EXPECT_EQ(message->value.int32Values[7], 0);
108 EXPECT_EQ(message->value.int32Values[8], 2);
109 }
110
TEST(VmsUtilsTest,availabilityMessage)111 TEST(VmsUtilsTest, availabilityMessage) {
112 auto message = createAvailabilityRequest();
113 ASSERT_NE(message, nullptr);
114 EXPECT_TRUE(isValidVmsMessage(*message));
115 EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
116 EXPECT_EQ(message->value.int32Values.size(), 0x1ul);
117 EXPECT_EQ(parseMessageType(*message), VmsMessageType::AVAILABILITY_REQUEST);
118 }
119
TEST(VmsUtilsTest,subscriptionsMessage)120 TEST(VmsUtilsTest, subscriptionsMessage) {
121 auto message = createSubscriptionsRequest();
122 ASSERT_NE(message, nullptr);
123 EXPECT_TRUE(isValidVmsMessage(*message));
124 EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
125 EXPECT_EQ(message->value.int32Values.size(), 0x1ul);
126 EXPECT_EQ(parseMessageType(*message), VmsMessageType::SUBSCRIPTIONS_REQUEST);
127 }
128
TEST(VmsUtilsTest,dataMessage)129 TEST(VmsUtilsTest, dataMessage) {
130 std::string bytes = "aaa";
131 auto message = createDataMessage(bytes);
132 ASSERT_NE(message, nullptr);
133 EXPECT_TRUE(isValidVmsMessage(*message));
134 EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
135 EXPECT_EQ(message->value.int32Values.size(), 0x1ul);
136 EXPECT_EQ(parseMessageType(*message), VmsMessageType::DATA);
137 EXPECT_EQ(message->value.bytes.size(), bytes.size());
138 EXPECT_EQ(memcmp(message->value.bytes.data(), bytes.data(), bytes.size()), 0);
139 }
140
TEST(VmsUtilsTest,emptyMessageInvalid)141 TEST(VmsUtilsTest, emptyMessageInvalid) {
142 VehiclePropValue empty_prop;
143 EXPECT_FALSE(isValidVmsMessage(empty_prop));
144 }
145
TEST(VmsUtilsTest,invalidMessageType)146 TEST(VmsUtilsTest, invalidMessageType) {
147 VmsLayer layer(1, 0, 2);
148 auto message = createSubscribeMessage(layer);
149 message->value.int32Values[0] = 0;
150
151 EXPECT_FALSE(isValidVmsMessage(*message));
152 }
153
TEST(VmsUtilsTest,parseDataMessage)154 TEST(VmsUtilsTest, parseDataMessage) {
155 std::string bytes = "aaa";
156 auto message = createDataMessage(bytes);
157 auto data_str = parseData(*message);
158 ASSERT_FALSE(data_str.empty());
159 EXPECT_EQ(data_str, bytes);
160 }
161
TEST(VmsUtilsTest,parseInvalidDataMessage)162 TEST(VmsUtilsTest, parseInvalidDataMessage) {
163 VmsLayer layer(1, 0, 2);
164 auto message = createSubscribeMessage(layer);
165 auto data_str = parseData(*message);
166 EXPECT_TRUE(data_str.empty());
167 }
168
169 } // namespace
170
171 } // namespace vms
172 } // namespace V2_0
173 } // namespace vehicle
174 } // namespace automotive
175 } // namespace hardware
176 } // namespace android
177