summaryrefslogtreecommitdiff
path: root/src/components/security_manager/test/security_query_matcher.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/security_manager/test/security_query_matcher.cc')
-rw-r--r--src/components/security_manager/test/security_query_matcher.cc123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/components/security_manager/test/security_query_matcher.cc b/src/components/security_manager/test/security_query_matcher.cc
new file mode 100644
index 000000000..2320e8343
--- /dev/null
+++ b/src/components/security_manager/test/security_query_matcher.cc
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2014, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <gmock/gmock.h>
+#include <string>
+#include "utils/byte_order.h"
+#include "security_manager/security_query.h"
+
+namespace test {
+namespace components {
+namespace security_manager_test {
+
+/*
+ * Matcher for checking RawMessage with InternalError Query
+ * Check error id
+ */
+MATCHER_P(InternalErrorWithErrId, expectedErrorId,
+ std::string(negation ? "is not" : "is")
+ + " InternalError with selected error" ){
+ const size_t header_size =
+ sizeof(security_manager::SecurityQuery::QueryHeader);
+ if (arg->data_size() <= header_size) {
+ *result_listener << "Size " << arg->data_size()
+ << " bytes less or equal sizeof(QueryHeader)="
+ << header_size;
+ return false;
+ }
+ const uint8_t *data = arg->data();
+ const uint8_t query_type = data[0];
+ if (security_manager::SecurityQuery::NOTIFICATION != query_type) {
+ *result_listener << "RawMessage is not notification, type=0x"
+ << std::hex << static_cast<int>(query_type);
+ return false;
+ }
+ // Read Big-Endian number
+ const uint32_t query_id = data[1] << 16 |
+ data[2] << 8 |
+ data[3];
+ if (security_manager::SecurityQuery::SEND_INTERNAL_ERROR != query_id) {
+ *result_listener << "Notification is not InternalError, id=0x"
+ << std::hex << query_id;
+ return false;
+ }
+ const uint32_t json_size = data[8] << 24 |
+ data[9] << 16 |
+ data[10] << 8 |
+ data[11];
+ if (header_size + json_size >= arg->data_size()) {
+ *result_listener << "InternalError contains only JSON data.";
+ return false;
+ }
+ // Read err_id as bin data number
+ const uint8_t *err_id =
+ reinterpret_cast<const uint8_t *>(data + header_size + json_size);
+ if (expectedErrorId != *err_id) {
+ *result_listener << "InternalError id " << static_cast<int>(*err_id)
+ << " and not equal error " << expectedErrorId;
+ return false;
+ }
+ return true;
+}
+
+} // namespace security_manager_test
+} // namespace components
+} // namespace test
+/*
+ * Matcher for checking QueryHeader equal in GTests
+ */
+::testing::AssertionResult QueryHeader_EQ(
+ const char *m_expr, const char *n_expr,
+ const ::security_manager::SecurityQuery::QueryHeader &q1,
+ const ::security_manager::SecurityQuery::QueryHeader &q2);
+
+::testing::AssertionResult QueryHeader_EQ(
+ const char* m_expr, const char* n_expr,
+ const ::security_manager::SecurityQuery::QueryHeader& q1,
+ const ::security_manager::SecurityQuery::QueryHeader& q2) {
+ ::testing::AssertionResult fail_result = ::testing::AssertionFailure();
+ fail_result << "(\"" << m_expr << " and \"" << n_expr << "\") are not equal "
+ << " : different ";
+ if (q1.json_size != q2.json_size)
+ return fail_result << "json_size_1=" << q1.json_size << ", json_size_2="
+ << q2.json_size;
+ if (q1.query_id != q2.query_id)
+ return fail_result << "query_id_1=" << q1.query_id << ", query_id_2="
+ << q2.query_id;
+ if (q1.query_type != q2.query_type)
+ return fail_result << "query_type_1=" << q1.query_type << ", query_type_2="
+ << q2.query_type;
+ if (q1.seq_number != q2.seq_number)
+ return fail_result << "seq_number_1=" << q1.seq_number << ", seq_number_2="
+ << q2.seq_number;
+ return ::testing::AssertionSuccess();
+}