/* * 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 #include #include #include #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 TestComponent() { return fruit::createComponent() .install(AdbConfigComponent) .install(AdbConfigFlagComponent) .install(AdbConfigFragmentComponent) .install(ConfigFlagPlaceholder); } TEST(AdbConfigTest, SetFromFlags) { fruit::Injector injector(TestComponent); TestData& data = injector.get(); std::vector args = { "--adb_mode=vsock_tunnel,vsock_half_tunnel,native_vsock,unknown", "--run_adb_connector=false", }; auto flags = injector.getMultibindings(); auto processed = FlagFeature::ProcessFlags(flags, args); ASSERT_TRUE(processed.ok()) << processed.error(); ASSERT_TRUE(args.empty()); std::set 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 injector1(TestComponent); TestData& data1 = injector1.get(); ASSERT_TRUE( data1.config.SetModes({AdbMode::VsockTunnel, AdbMode::VsockHalfTunnel, AdbMode::NativeVsock, AdbMode::Unknown})); ASSERT_TRUE(data1.config.SetRunConnector(false)); fruit::Injector injector2(TestComponent); TestData& data2 = injector2.get(); 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