1af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler/*
2af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * Copyright (C) 2016 The Android Open Source Project
3af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler *
4af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * Licensed under the Apache License, Version 2.0 (the "License");
5af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * you may not use this file except in compliance with the License.
6af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * You may obtain a copy of the License at
7af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler *
8af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler *      http://www.apache.org/licenses/LICENSE-2.0
9af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler *
10af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * Unless required by applicable law or agreed to in writing, software
11af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * distributed under the License is distributed on an "AS IS" BASIS,
12af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * See the License for the specific language governing permissions and
14af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler * limitations under the License.
15af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler */
16af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
17af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler#include <stdlib.h>
18af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler#include <string.h>
19af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
20af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler#include <gtest/gtest.h>
21af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
22a715cb1840f9a0c813c90707a351687f7a77950eMattias Nissler#include <nvram/messages/nvram_messages.h>
23af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
24af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nisslernamespace nvram {
25af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
26af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nisslernamespace {
27af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
28af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nisslertemplate <typename Message>
29af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nisslervoid EncodeAndDecode(const Message& in, Message* out) {
30af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Blob blob;
31af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(Encode(in, &blob));
32af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(Decode(blob.data(), blob.size(), out));
33af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
34af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
35af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}  // namespace
36af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
37af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, GetInfoRequest) {
38af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
39af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request.payload.Activate<COMMAND_GET_INFO>();
40af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
41af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
42af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
43af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
44af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_GET_INFO, decoded.payload.which());
45af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_GET_INFO>());
46af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
47af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
48af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, GetInfoResponse) {
49af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
50af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_SUCCESS;
51af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.payload.Activate<COMMAND_GET_INFO>();
52af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
53af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  GetInfoResponse& response_payload =
54af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      response.payload.Activate<COMMAND_GET_INFO>();
55af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response_payload.total_size = 32768;
56af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response_payload.available_size = 4096;
57088471151b7784cef5a8555e1f155454df106113Darren Krahn  response_payload.max_space_size = 512;
58af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response_payload.max_spaces = 32;
59af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.space_list.Append(0x1234));
60af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.space_list.Append(0xffffffff));
61af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.space_list.Append(0x32));
62af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.space_list.Append(0x0));
63af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.space_list.Append(0x1));
64af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
65af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
66af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
67af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
68af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_SUCCESS, response.result);
69af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_GET_INFO, decoded.payload.which());
70af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const GetInfoResponse* decoded_payload =
71af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_GET_INFO>();
72af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
73af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
74af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(32768ULL, decoded_payload->total_size);
75af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(4096ULL, decoded_payload->available_size);
76088471151b7784cef5a8555e1f155454df106113Darren Krahn  EXPECT_EQ(512ULL, decoded_payload->max_space_size);
77af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(32U, decoded_payload->max_spaces);
78af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(5U, decoded_payload->space_list.size());
79af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1234U, decoded_payload->space_list[0]);
80af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0xffffffffU, decoded_payload->space_list[1]);
81af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x32U, decoded_payload->space_list[2]);
82af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x0U, decoded_payload->space_list[3]);
83af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1U, decoded_payload->space_list[4]);
84af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
85af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
86af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, CreateSpaceRequest) {
87af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
88af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  CreateSpaceRequest& request_payload =
89af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      request.payload.Activate<COMMAND_CREATE_SPACE>();
90af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.index = 0x12345678;
91af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.size = 8;
92af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.controls.Append(NV_CONTROL_BOOT_WRITE_LOCK));
93af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.controls.Append(NV_CONTROL_WRITE_EXTEND));
94af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kAuthValue[] = {1, 2, 3, 4, 5};
95af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.authorization_value.Assign(kAuthValue,
96af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler                                                         sizeof(kAuthValue)));
97af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
98af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
99af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
100af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
101af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_CREATE_SPACE, decoded.payload.which());
102af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const CreateSpaceRequest* decoded_payload =
103af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_CREATE_SPACE>();
104af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
105af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
106af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x12345678U, decoded_payload->index);
107af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(8ULL, decoded_payload->size);
108af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(2UL, decoded_payload->controls.size());
109af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_CONTROL_BOOT_WRITE_LOCK, decoded_payload->controls[0]);
110af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_CONTROL_WRITE_EXTEND, decoded_payload->controls[1]);
111af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_auth_value = decoded_payload->authorization_value;
112af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kAuthValue), decoded_auth_value.size());
113af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0,
114af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler            memcmp(kAuthValue, decoded_auth_value.data(), sizeof(kAuthValue)));
115af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
116af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
117af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, CreateSpaceResponse) {
118af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
119af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_SPACE_ALREADY_EXISTS;
120af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.payload.Activate<COMMAND_CREATE_SPACE>();
121af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
122af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
123af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
124af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
125af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_SPACE_ALREADY_EXISTS, response.result);
126af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_CREATE_SPACE, decoded.payload.which());
127af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_CREATE_SPACE>());
128af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
129af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
130af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, GetSpaceInfoRequest) {
131af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
132af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  GetSpaceInfoRequest& request_payload =
133af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      request.payload.Activate<COMMAND_GET_SPACE_INFO>();
134af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.index = 0x1234;
135af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
136af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
137af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
138af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
139af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_GET_SPACE_INFO, decoded.payload.which());
140af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const GetSpaceInfoRequest* decoded_payload =
141af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_GET_SPACE_INFO>();
142af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
143af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
144af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1234U, decoded_payload->index);
145af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
146af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
147af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, GetSpaceInfoResponse) {
148af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
149af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_SPACE_DOES_NOT_EXIST;
150af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  GetSpaceInfoResponse& response_payload =
151af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      response.payload.Activate<COMMAND_GET_SPACE_INFO>();
152af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response_payload.size = 256;
153af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.controls.Append(NV_CONTROL_BOOT_WRITE_LOCK));
154af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.controls.Append(NV_CONTROL_BOOT_READ_LOCK));
155af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.controls.Append(NV_CONTROL_WRITE_EXTEND));
156af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response_payload.read_locked = false;
157af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response_payload.write_locked = true;
158af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
159af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
160af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
161af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
162af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_SPACE_DOES_NOT_EXIST, response.result);
163af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_GET_SPACE_INFO, decoded.payload.which());
164af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const GetSpaceInfoResponse* decoded_payload =
165af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_GET_SPACE_INFO>();
166af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
167af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
168af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(256ULL, decoded_payload->size);
169af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(3U, decoded_payload->controls.size());
170af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_CONTROL_BOOT_WRITE_LOCK, decoded_payload->controls[0]);
171af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_CONTROL_BOOT_READ_LOCK, decoded_payload->controls[1]);
172af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_CONTROL_WRITE_EXTEND, decoded_payload->controls[2]);
173af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_FALSE(decoded_payload->read_locked);
174af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded_payload->write_locked);
175af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
176af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
177af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, DeleteSpaceRequest) {
178af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
179af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  DeleteSpaceRequest& request_payload =
180af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      request.payload.Activate<COMMAND_DELETE_SPACE>();
181af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.index = 0x1234;
182af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kAuthValue[] = {1, 2, 3};
183af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.authorization_value.Assign(kAuthValue,
184af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler                                                         sizeof(kAuthValue)));
185af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
186af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
187af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
188af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
189af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_DELETE_SPACE, decoded.payload.which());
190af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const DeleteSpaceRequest* decoded_payload =
191af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_DELETE_SPACE>();
192af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
193af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
194af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1234U, decoded_payload->index);
195af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_auth_value = decoded_payload->authorization_value;
196af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kAuthValue), decoded_auth_value.size());
197af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0,
198af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler            memcmp(kAuthValue, decoded_auth_value.data(), sizeof(kAuthValue)));
199af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
200af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
201af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, DeleteSpaceResponse) {
202af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
203af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_ACCESS_DENIED;
204af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.payload.Activate<COMMAND_DELETE_SPACE>();
205af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
206af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
207af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
208af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
209af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_ACCESS_DENIED, response.result);
210af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_DELETE_SPACE, decoded.payload.which());
211af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_DELETE_SPACE>());
212af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
213af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
214af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, DisableCreateRequest) {
215af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
216af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request.payload.Activate<COMMAND_DISABLE_CREATE>();
217af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
218af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
219af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
220af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
221af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_DISABLE_CREATE, decoded.payload.which());
222af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_DISABLE_CREATE>());
223af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
224af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
225af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, DisableCreateResponse) {
226af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
227af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_INTERNAL_ERROR;
228af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.payload.Activate<COMMAND_DISABLE_CREATE>();
229af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
230af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
231af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
232af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
233af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_INTERNAL_ERROR, response.result);
234af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_DISABLE_CREATE, decoded.payload.which());
235af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_DISABLE_CREATE>());
236af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
237af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
238af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, WriteSpaceRequest) {
239af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
240af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  WriteSpaceRequest& request_payload =
241af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      request.payload.Activate<COMMAND_WRITE_SPACE>();
242af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.index = 0x1234;
243af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kData[] = {17, 29, 33};
244af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.buffer.Assign(kData, sizeof(kData)));
245af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kAuthValue[] = {1, 2, 3};
246af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.authorization_value.Assign(kAuthValue,
247af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler                                                         sizeof(kAuthValue)));
248af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
249af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
250af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
251af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
252af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_WRITE_SPACE, decoded.payload.which());
253af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const WriteSpaceRequest* decoded_payload =
254af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_WRITE_SPACE>();
255af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
256af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
257af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1234U, decoded_payload->index);
258af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_buffer = decoded_payload->buffer;
259af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kData), decoded_buffer.size());
260af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0, memcmp(kData, decoded_buffer.data(), sizeof(kData)));
261af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_auth_value = decoded_payload->authorization_value;
262af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kAuthValue), decoded_auth_value.size());
263af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0,
264af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler            memcmp(kAuthValue, decoded_auth_value.data(), sizeof(kAuthValue)));
265af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
266af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
267af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, WriteSpaceResponse) {
268af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
269af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_OPERATION_DISABLED;
270af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.payload.Activate<COMMAND_WRITE_SPACE>();
271af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
272af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
273af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
274af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
275af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_OPERATION_DISABLED, response.result);
276af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_WRITE_SPACE, decoded.payload.which());
277af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_WRITE_SPACE>());
278af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
279af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
280af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, ReadSpaceRequest) {
281af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
282af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ReadSpaceRequest& request_payload =
283af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      request.payload.Activate<COMMAND_READ_SPACE>();
284af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.index = 0x1234;
285af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kAuthValue[] = {1, 2, 3};
286af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.authorization_value.Assign(kAuthValue,
287af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler                                                         sizeof(kAuthValue)));
288af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
289af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
290af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
291af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
292af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_READ_SPACE, decoded.payload.which());
293af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const ReadSpaceRequest* decoded_payload =
294af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_READ_SPACE>();
295af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
296af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
297af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1234U, decoded_payload->index);
298af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_auth_value = decoded_payload->authorization_value;
299af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kAuthValue), decoded_auth_value.size());
300af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0,
301af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler            memcmp(kAuthValue, decoded_auth_value.data(), sizeof(kAuthValue)));
302af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
303af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
304af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, ReadSpaceResponse) {
305af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
306af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_SUCCESS;
307af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ReadSpaceResponse& response_payload =
308af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      response.payload.Activate<COMMAND_READ_SPACE>();
309af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kData[] = {48, 0, 32, 1, 255};
310af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(response_payload.buffer.Assign(kData, sizeof(kData)));
311af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
312af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
313af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
314af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
315af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_SUCCESS, response.result);
316af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_READ_SPACE, decoded.payload.which());
317af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const ReadSpaceResponse* decoded_payload =
318af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_READ_SPACE>();
319af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
320af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_buffer = decoded_payload->buffer;
321af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kData), decoded_buffer.size());
322af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0, memcmp(kData, decoded_buffer.data(), sizeof(kData)));
323af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
324af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
325af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, LockSpaceWriteRequest) {
326af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
327af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  LockSpaceWriteRequest& request_payload =
328af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      request.payload.Activate<COMMAND_LOCK_SPACE_WRITE>();
329af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.index = 0x1234;
330af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kAuthValue[] = {1, 2, 3};
331af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.authorization_value.Assign(kAuthValue,
332af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler                                                         sizeof(kAuthValue)));
333af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
334af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
335af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
336af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
337af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_LOCK_SPACE_WRITE, decoded.payload.which());
338af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const LockSpaceWriteRequest* decoded_payload =
339af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_LOCK_SPACE_WRITE>();
340af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
341af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
342af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1234U, decoded_payload->index);
343af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_auth_value = decoded_payload->authorization_value;
344af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kAuthValue), decoded_auth_value.size());
345af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0,
346af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler            memcmp(kAuthValue, decoded_auth_value.data(), sizeof(kAuthValue)));
347af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
348af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
349af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, LockSpaceWriteResponse) {
350af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
351af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_SUCCESS;
352af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.payload.Activate<COMMAND_LOCK_SPACE_WRITE>();
353af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
354af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
355af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
356af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
357af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_SUCCESS, response.result);
358af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_LOCK_SPACE_WRITE, decoded.payload.which());
359af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_LOCK_SPACE_WRITE>());
360af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
361af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
362af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, LockSpaceReadRequest) {
363af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request request;
364af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  LockSpaceReadRequest& request_payload =
365af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      request.payload.Activate<COMMAND_LOCK_SPACE_READ>();
366af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  request_payload.index = 0x1234;
367af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const uint8_t kAuthValue[] = {1, 2, 3};
368af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(request_payload.authorization_value.Assign(kAuthValue,
369af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler                                                         sizeof(kAuthValue)));
370af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
371af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Request decoded;
372af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(request, &decoded);
373af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
374af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_LOCK_SPACE_READ, decoded.payload.which());
375af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const LockSpaceReadRequest* decoded_payload =
376af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      decoded.payload.get<COMMAND_LOCK_SPACE_READ>();
377af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_TRUE(decoded_payload);
378af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
379af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0x1234U, decoded_payload->index);
380af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  const Blob& decoded_auth_value = decoded_payload->authorization_value;
381af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  ASSERT_EQ(sizeof(kAuthValue), decoded_auth_value.size());
382af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(0,
383af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler            memcmp(kAuthValue, decoded_auth_value.data(), sizeof(kAuthValue)));
384af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
385af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
386af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, LockSpaceReadResponse) {
387af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response response;
388af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.result = NV_RESULT_SUCCESS;
389af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  response.payload.Activate<COMMAND_LOCK_SPACE_READ>();
390af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
391af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  Response decoded;
392af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EncodeAndDecode(response, &decoded);
393af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
394af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(NV_RESULT_SUCCESS, response.result);
395af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_EQ(COMMAND_LOCK_SPACE_READ, decoded.payload.which());
396af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  EXPECT_TRUE(decoded.payload.get<COMMAND_LOCK_SPACE_READ>());
397af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
398af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
399af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias NisslerTEST(NvramMessagesTest, GarbageDecode) {
400af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  srand(0);
401af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  uint8_t random_data[1024];
402af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  for (size_t i = 0; i < sizeof(random_data); ++i) {
403af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler    random_data[i] = rand() & 0xff;
404af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  }
405af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
406af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  // Feed the data to the decoder. The test succeeds if we don't crash.
407af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  for (size_t pos = 0; pos < sizeof(random_data); ++pos) {
408af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler    for (size_t end = pos; end < sizeof(random_data); ++end) {
409af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      Request request;
410af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      Decode(random_data + pos, end - pos, &request);
411af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
412af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      Response response;
413af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler      Decode(random_data + pos, end - pos, &response);
414af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler    }
415af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler  }
416af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}
417af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler
418af96ca4702d2766e3757fcee54e8eece7cb6d69eMattias Nissler}  // namespace nvram
419