blob: 7e4aab8802345146699f1d4940e23c682dd31e34 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/cryptauth/remote_beacon_seed_fetcher.h"
#include <memory>
#include "base/macros.h"
#include "components/cryptauth/cryptauth_client.h"
#include "components/cryptauth/fake_cryptauth_device_manager.h"
#include "components/cryptauth/remote_device.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using testing::StrictMock;
using testing::Return;
namespace cryptauth {
namespace {
const std::string fake_beacon_seed1_data = "fakeBeaconSeed1Data";
const int64_t fake_beacon_seed1_start_ms = 1000L;
const int64_t fake_beacon_seed1_end_ms = 2000L;
const std::string fake_beacon_seed2_data = "fakeBeaconSeed2Data";
const int64_t fake_beacon_seed2_start_ms = 2000L;
const int64_t fake_beacon_seed2_end_ms = 3000L;
const std::string fake_beacon_seed3_data = "fakeBeaconSeed3Data";
const int64_t fake_beacon_seed3_start_ms = 1000L;
const int64_t fake_beacon_seed3_end_ms = 2000L;
const std::string fake_beacon_seed4_data = "fakeBeaconSeed4Data";
const int64_t fake_beacon_seed4_start_ms = 2000L;
const int64_t fake_beacon_seed4_end_ms = 3000L;
const std::string public_key1 = "publicKey1";
const std::string public_key2 = "publicKey2";
ExternalDeviceInfo CreateFakeInfo1() {
BeaconSeed seed1;
seed1.set_data(fake_beacon_seed1_data);
seed1.set_start_time_millis(fake_beacon_seed1_start_ms);
seed1.set_end_time_millis(fake_beacon_seed1_end_ms);
BeaconSeed seed2;
seed2.set_data(fake_beacon_seed2_data);
seed2.set_start_time_millis(fake_beacon_seed2_start_ms);
seed2.set_end_time_millis(fake_beacon_seed2_end_ms);
ExternalDeviceInfo info1;
info1.set_public_key(public_key1);
info1.add_beacon_seeds()->CopyFrom(seed1);
info1.add_beacon_seeds()->CopyFrom(seed2);
return info1;
}
ExternalDeviceInfo CreateFakeInfo2() {
BeaconSeed seed3;
seed3.set_data(fake_beacon_seed3_data);
seed3.set_start_time_millis(fake_beacon_seed3_start_ms);
seed3.set_end_time_millis(fake_beacon_seed3_end_ms);
BeaconSeed seed4;
seed4.set_data(fake_beacon_seed4_data);
seed4.set_start_time_millis(fake_beacon_seed4_start_ms);
seed4.set_end_time_millis(fake_beacon_seed4_end_ms);
ExternalDeviceInfo info2;
info2.set_public_key(public_key2);
info2.add_beacon_seeds()->CopyFrom(seed3);
info2.add_beacon_seeds()->CopyFrom(seed4);
return info2;
}
} // namespace
class CryptAuthRemoteBeaconSeedFetcherTest : public testing::Test {
protected:
CryptAuthRemoteBeaconSeedFetcherTest()
: fake_info1_(CreateFakeInfo1()), fake_info2_(CreateFakeInfo2()) {}
void SetUp() override {
fake_device_manager_ = std::make_unique<FakeCryptAuthDeviceManager>();
fetcher_ = std::make_unique<StrictMock<RemoteBeaconSeedFetcher>>(
fake_device_manager_.get());
}
std::unique_ptr<RemoteBeaconSeedFetcher> fetcher_;
std::unique_ptr<FakeCryptAuthDeviceManager> fake_device_manager_;
const ExternalDeviceInfo fake_info1_;
const ExternalDeviceInfo fake_info2_;
private:
DISALLOW_COPY_AND_ASSIGN(CryptAuthRemoteBeaconSeedFetcherTest);
};
TEST_F(CryptAuthRemoteBeaconSeedFetcherTest, TestRemoteDeviceWithNoPublicKey) {
std::vector<BeaconSeed> seeds;
EXPECT_FALSE(fetcher_->FetchSeedsForDeviceId(std::string(), &seeds));
}
TEST_F(CryptAuthRemoteBeaconSeedFetcherTest, TestNoSyncedDevices) {
std::vector<BeaconSeed> seeds;
EXPECT_FALSE(fetcher_->FetchSeedsForDeviceId(
RemoteDevice::GenerateDeviceId(public_key1), &seeds));
}
TEST_F(CryptAuthRemoteBeaconSeedFetcherTest, TestDeviceHasDifferentPublicKey) {
fake_device_manager_->set_synced_devices(
std::vector<ExternalDeviceInfo>{fake_info1_, fake_info2_});
std::vector<BeaconSeed> seeds;
EXPECT_FALSE(fetcher_->FetchSeedsForDeviceId(
RemoteDevice::GenerateDeviceId("differentPublicKey"), &seeds));
}
TEST_F(CryptAuthRemoteBeaconSeedFetcherTest, TestSuccess) {
fake_device_manager_->set_synced_devices(
std::vector<ExternalDeviceInfo>{fake_info1_, fake_info2_});
std::vector<BeaconSeed> seeds1;
ASSERT_TRUE(fetcher_->FetchSeedsForDeviceId(
RemoteDevice::GenerateDeviceId(public_key1), &seeds1));
ASSERT_EQ(2u, seeds1.size());
EXPECT_EQ(fake_beacon_seed1_data, seeds1[0].data());
EXPECT_EQ(fake_beacon_seed1_start_ms, seeds1[0].start_time_millis());
EXPECT_EQ(fake_beacon_seed1_end_ms, seeds1[0].end_time_millis());
EXPECT_EQ(fake_beacon_seed2_data, seeds1[1].data());
EXPECT_EQ(fake_beacon_seed2_start_ms, seeds1[1].start_time_millis());
EXPECT_EQ(fake_beacon_seed2_end_ms, seeds1[1].end_time_millis());
std::vector<BeaconSeed> seeds2;
ASSERT_TRUE(fetcher_->FetchSeedsForDeviceId(
RemoteDevice::GenerateDeviceId(public_key2), &seeds2));
ASSERT_EQ(2u, seeds2.size());
EXPECT_EQ(fake_beacon_seed3_data, seeds2[0].data());
EXPECT_EQ(fake_beacon_seed3_start_ms, seeds2[0].start_time_millis());
EXPECT_EQ(fake_beacon_seed3_end_ms, seeds2[0].end_time_millis());
EXPECT_EQ(fake_beacon_seed4_data, seeds2[1].data());
EXPECT_EQ(fake_beacon_seed4_start_ms, seeds2[1].start_time_millis());
EXPECT_EQ(fake_beacon_seed4_end_ms, seeds2[1].end_time_millis());
}
} // namespace cryptauth