13f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh/*
23f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Copyright (C) 2017 The Android Open Source Project
33f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *
43f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Licensed under the Apache License, Version 2.0 (the "License");
53f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * you may not use this file except in compliance with the License.
63f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * You may obtain a copy of the License at
73f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *
83f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *      http://www.apache.org/licenses/LICENSE-2.0
93f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *
103f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Unless required by applicable law or agreed to in writing, software
113f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * distributed under the License is distributed on an "AS IS" BASIS,
123f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * See the License for the specific language governing permissions and
143f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * limitations under the License.
153f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh */
163f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
173f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "gtest/gtest.h"
183f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
193f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "include/utility.h"
203f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
213f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehtemplate <typename TestType>
223f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehclass OffloadTypesTest : public testing::Test {
233f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh public:
243f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  // RandomGenerator used to initialize data-types with random values
253f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  wifi_offload_test::RandomGenerator random_gen_;
263f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
273f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  flatbuffers::FlatBufferBuilder builder;
283f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
293f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  void EqualOperatorReturnsTrueForEqualValues() {
303f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    TestType lhs;
313f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    init(lhs, random_gen_);
323f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
333f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    random_gen_.Reset();
343f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    TestType rhs;
353f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    init(rhs, random_gen_);
363f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
373f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    EXPECT_EQ(lhs, rhs);
383f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
393f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
403f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  void EqualOperatorReturnsFalseForDifferentValues() {
413f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    TestType lhs, rhs;
423f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    init(lhs, random_gen_);
433f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    init(rhs, random_gen_);
443f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
453f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_FALSE(lhs == rhs);
463f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
473f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
483f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  void SerializationThenDeserializationCreatesEqualValue() {
493f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    TestType test_obj;
503f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    init(test_obj, random_gen_);
513f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    builder.Finish(test_obj.Serialize(&builder));
523f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
533f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    const uint8_t *serialized_buff = builder.GetBufferPointer();
543f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    const size_t serialized_size = builder.GetSize();
553f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_NE(nullptr, serialized_buff);
563f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_NE(0, serialized_size);
573f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
583f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    flatbuffers::Verifier verifier(serialized_buff, serialized_size);
593f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_TRUE(verifier.VerifyBuffer<typename TestType::FbsType>(nullptr));
603f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
613f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    const auto fbs_obj =
623f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh        flatbuffers::GetRoot<typename TestType::FbsType>(serialized_buff);
633f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_NE(nullptr, fbs_obj);
643f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
653f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    TestType deserialized_obj;
663f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_TRUE(deserialized_obj.Deserialize(*fbs_obj));
673f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    EXPECT_EQ(test_obj, deserialized_obj);
683f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
693f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh};
703f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
713f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehtypedef testing::Types<wifi_offload::PreferredNetwork, wifi_offload::ScanResult,
723f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                       wifi_offload::ScanParams, wifi_offload::ScanFilter,
733f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                       wifi_offload::ScanConfig, wifi_offload::ScanRecord,
743f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                       wifi_offload::RpcLogRecord, wifi_offload::ScanStats>
753f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    Implementations;
763f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
773f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTYPED_TEST_CASE(OffloadTypesTest, Implementations);
783f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
793f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTYPED_TEST(OffloadTypesTest, EqualOperatorReturnsTrueForEqualValues) {
803f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  this->EqualOperatorReturnsTrueForEqualValues();
813f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
823f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
833f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTYPED_TEST(OffloadTypesTest, EqualOperatorReturnsFalseForDifferentValues) {
843f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  this->EqualOperatorReturnsFalseForDifferentValues();
853f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
863f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
873f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTYPED_TEST(OffloadTypesTest,
883f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh           SerializationThenDeserializationCreatesEqualValue) {
893f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  this->SerializationThenDeserializationCreatesEqualValue();
903f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
91