1/*
2 * Copyright (C) 2016, 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 <functional>
18#include <memory>
19#include <string>
20#include <vector>
21
22#include <gtest/gtest.h>
23
24#include "wificond/scanning/offload/offload_callback.h"
25#include "wificond/scanning/scan_result.h"
26#include "wificond/tests/mock_offload_callback_handlers.h"
27#include "wificond/tests/offload_test_utils.h"
28
29using android::hardware::wifi::offload::V1_0::ScanResult;
30using android::hardware::wifi::offload::V1_0::OffloadStatus;
31using android::hardware::wifi::offload::V1_0::OffloadStatusCode;
32using android::hardware::hidl_vec;
33using testing::NiceMock;
34
35namespace android {
36namespace wificond {
37
38class OffloadCallbackTest : public ::testing::Test {
39 protected:
40  virtual void SetUp() {
41    dummy_scan_results_ = OffloadTestUtils::createOffloadScanResults();
42  }
43
44  void TearDown() override { dummy_scan_results_.clear(); }
45
46  std::vector<ScanResult> dummy_scan_results_;
47  std::unique_ptr<OffloadCallback> offload_callback_;
48  std::unique_ptr<NiceMock<MockOffloadCallbackHandlers>> handlers_;
49};
50
51/**
52 * Testing OffloadCallback to invoke the registered callback handler
53 * with the scan results when they are available
54 */
55TEST_F(OffloadCallbackTest, checkScanResultSize) {
56  std::vector<ScanResult> scan_result;
57  handlers_.reset(new NiceMock<MockOffloadCallbackHandlers>());
58  ON_CALL(*handlers_, OnScanResultHandler(testing::_))
59      .WillByDefault(testing::Invoke(
60          [&scan_result](std::vector<ScanResult> scanResult) -> void {
61            scan_result = scanResult;
62          }));
63  offload_callback_.reset(new OffloadCallback(handlers_.get()));
64  hidl_vec<ScanResult> offloadScanResult(dummy_scan_results_);
65  offload_callback_->onScanResult(offloadScanResult);
66  EXPECT_EQ(dummy_scan_results_.size(), scan_result.size());
67}
68
69/**
70 * Testing OffloadCallback to invoke the registered error handler
71 */
72TEST_F(OffloadCallbackTest, checkErrorStatus) {
73  OffloadStatus status_;
74  handlers_.reset(new NiceMock<MockOffloadCallbackHandlers>());
75  ON_CALL(*handlers_, OnErrorHandler(testing::_))
76      .WillByDefault(testing::Invoke(
77          [&status_](OffloadStatus status) -> void { status_ = status; }));
78  offload_callback_.reset(new OffloadCallback(handlers_.get()));
79  OffloadStatus status =
80      OffloadTestUtils::createOffloadStatus(OffloadStatusCode::ERROR);
81  offload_callback_->onError(status);
82  EXPECT_EQ(status_.code, OffloadStatusCode::ERROR);
83}
84
85}  // namespace wificond
86}  // namespace android
87