// Copyright 2020 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 "util/crypto/random_bytes.h" #include #include #include "gtest/gtest.h" namespace openscreen { namespace { struct NonZero { NonZero() = default; bool operator()(int n) const { return n > 0; } }; } // namespace TEST(RandomBytesTest, CanGenerateRandomBytes) { std::array bytes; GenerateRandomBytes(bytes.begin(), bytes.size()); NonZero pred; ASSERT_TRUE(std::any_of(bytes.begin(), bytes.end(), pred)); } TEST(RandomBytesTest, CanGenerate16RandomBytes) { std::array bytes = GenerateRandomBytes16(); NonZero pred; ASSERT_TRUE(std::any_of(bytes.begin(), bytes.end(), pred)); } TEST(RandomBytesTest, KeysAreNotIdentical) { constexpr int kNumKeys = 100; constexpr int kKeyLength = 100; std::array, kNumKeys> keys; for (int i = 0; i < kNumKeys; ++i) { GenerateRandomBytes(keys[i].begin(), kKeyLength); } std::sort(std::begin(keys), std::end(keys)); ASSERT_TRUE(std::adjacent_find(std::begin(keys), std::end(keys)) == std::end(keys)); } } // namespace openscreen