blob: 3250568cb3cdb74ac40826745107be56d7b232da [file] [log] [blame]
/*
* 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