77 lines
2.6 KiB
C++
77 lines
2.6 KiB
C++
/*
|
|
* Copyright (C) 2021 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <fruit/fruit.h>
|
|
#include <gtest/gtest.h>
|
|
#include <host/libs/config/adb/adb.h>
|
|
|
|
#include <string>
|
|
|
|
#include "host/libs/config/feature.h"
|
|
|
|
namespace cuttlefish {
|
|
|
|
struct TestData {
|
|
INJECT(TestData(AdbConfig& config, AdbConfigFragment& fragment))
|
|
: config(config), fragment(fragment) {}
|
|
|
|
AdbConfig& config;
|
|
AdbConfigFragment& fragment;
|
|
};
|
|
|
|
fruit::Component<TestData> TestComponent() {
|
|
return fruit::createComponent()
|
|
.install(AdbConfigComponent)
|
|
.install(AdbConfigFlagComponent)
|
|
.install(AdbConfigFragmentComponent)
|
|
.install(ConfigFlagPlaceholder);
|
|
}
|
|
|
|
TEST(AdbConfigTest, SetFromFlags) {
|
|
fruit::Injector<TestData> injector(TestComponent);
|
|
TestData& data = injector.get<TestData&>();
|
|
std::vector<std::string> args = {
|
|
"--adb_mode=vsock_tunnel,vsock_half_tunnel,native_vsock,unknown",
|
|
"--run_adb_connector=false",
|
|
};
|
|
auto flags = injector.getMultibindings<FlagFeature>();
|
|
auto processed = FlagFeature::ProcessFlags(flags, args);
|
|
ASSERT_TRUE(processed.ok()) << processed.error();
|
|
ASSERT_TRUE(args.empty());
|
|
|
|
std::set<AdbMode> modes = {AdbMode::VsockTunnel, AdbMode::VsockHalfTunnel,
|
|
AdbMode::NativeVsock, AdbMode::Unknown};
|
|
ASSERT_EQ(data.config.Modes(), modes);
|
|
ASSERT_FALSE(data.config.RunConnector());
|
|
}
|
|
|
|
TEST(AdbConfigTest, SerializeDeserialize) {
|
|
fruit::Injector<TestData> injector1(TestComponent);
|
|
TestData& data1 = injector1.get<TestData&>();
|
|
ASSERT_TRUE(
|
|
data1.config.SetModes({AdbMode::VsockTunnel, AdbMode::VsockHalfTunnel,
|
|
AdbMode::NativeVsock, AdbMode::Unknown}));
|
|
ASSERT_TRUE(data1.config.SetRunConnector(false));
|
|
|
|
fruit::Injector<TestData> injector2(TestComponent);
|
|
TestData& data2 = injector2.get<TestData&>();
|
|
ASSERT_TRUE(data2.fragment.Deserialize(data1.fragment.Serialize()));
|
|
ASSERT_EQ(data1.config.Modes(), data2.config.Modes());
|
|
ASSERT_EQ(data1.config.RunConnector(), data2.config.RunConnector());
|
|
}
|
|
|
|
} // namespace cuttlefish
|