1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.tradefed.config.filter;
17 
18 import static org.junit.Assert.assertEquals;
19 
20 import com.android.tradefed.config.Configuration;
21 import com.android.tradefed.config.IConfiguration;
22 import com.android.tradefed.config.OptionSetter;
23 
24 import com.proto.tradefed.feature.FeatureRequest;
25 import com.proto.tradefed.feature.FeatureResponse;
26 import com.proto.tradefed.feature.PartResponse;
27 
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.junit.runners.JUnit4;
32 
33 /**
34  * Unit tests for {@link CommandOptionsGetter}.
35  */
36 @RunWith(JUnit4.class)
37 public class CommandOptionsGetterTest {
38 
39     private IConfiguration mConfiguration;
40     private CommandOptionsGetter mGetter;
41 
42     @Before
setUp()43     public void setUp() {
44         mConfiguration = new Configuration("name", "description");
45         mGetter = new CommandOptionsGetter();
46         mGetter.setConfiguration(mConfiguration);
47     }
48 
49     @Test
getCommandOptionsValue()50     public void getCommandOptionsValue() throws Exception {
51         OptionSetter setter = new OptionSetter(mConfiguration.getCommandOptions());
52         setter.setOptionValue("filter-previous-passed", "false");
53         FeatureResponse response = mGetter.execute(FeatureRequest.newBuilder()
54                 .setName(CommandOptionsGetter.COMMAND_OPTIONS_GETTER)
55                 .putArgs(CommandOptionsGetter.OPTION_NAME, "filter-previous-passed").build());
56         assertEquals("false", response.getResponse());
57     }
58 
59     @Test
getCommandOptionsValue_updated()60     public void getCommandOptionsValue_updated() throws Exception {
61         OptionSetter setter = new OptionSetter(mConfiguration.getCommandOptions());
62         setter.setOptionValue("filter-previous-passed", "true");
63         FeatureResponse response = mGetter.execute(FeatureRequest.newBuilder()
64                 .setName(CommandOptionsGetter.COMMAND_OPTIONS_GETTER)
65                 .putArgs(CommandOptionsGetter.OPTION_NAME, "filter-previous-passed").build());
66 
67         assertEquals("true", response.getResponse());
68     }
69 
70     @Test
getCommandOptionsValue_multiValue()71     public void getCommandOptionsValue_multiValue() throws Exception {
72         OptionSetter setter = new OptionSetter(mConfiguration.getCommandOptions());
73         setter.setOptionValue("filter-previous-passed", "true");
74         setter.setOptionValue("test-tag", "mytag");
75         FeatureResponse response =
76                 mGetter.execute(
77                         FeatureRequest.newBuilder()
78                                 .setName(CommandOptionsGetter.COMMAND_OPTIONS_GETTER)
79                                 .putArgs(
80                                         CommandOptionsGetter.OPTION_NAME,
81                                         "filter-previous-passed,test-tag,auto-collect")
82                                 .build());
83         assertEquals(2, response.getMultiPartResponse().getResponsePartList().size());
84 
85         PartResponse part1 = response.getMultiPartResponse().getResponsePart(0);
86         assertEquals("filter-previous-passed", part1.getKey());
87         assertEquals("true", part1.getValue());
88 
89         PartResponse part2 = response.getMultiPartResponse().getResponsePart(1);
90         assertEquals("test-tag", part2.getKey());
91         assertEquals("mytag", part2.getValue());
92     }
93 
94     @Test
getCommandOptionsValue_set()95     public void getCommandOptionsValue_set() throws Exception {
96         OptionSetter setter = new OptionSetter(mConfiguration.getCommandOptions());
97         setter.setOptionValue("filter-previous-passed", "true");
98         setter.setOptionValue("test-tag", "mytag");
99         setter.setOptionValue("auto-collect", "DEVICE_TRACE");
100         setter.setOptionValue("auto-collect", "LOGCAT_ON_FAILURE");
101         FeatureResponse response =
102                 mGetter.execute(
103                         FeatureRequest.newBuilder()
104                                 .setName(CommandOptionsGetter.COMMAND_OPTIONS_GETTER)
105                                 .putArgs(
106                                         CommandOptionsGetter.OPTION_NAME,
107                                         "filter-previous-passed,test-tag,auto-collect")
108                                 .build());
109         assertEquals(4, response.getMultiPartResponse().getResponsePartList().size());
110 
111         PartResponse part1 = response.getMultiPartResponse().getResponsePart(0);
112         assertEquals("filter-previous-passed", part1.getKey());
113         assertEquals("true", part1.getValue());
114 
115         PartResponse part2 = response.getMultiPartResponse().getResponsePart(1);
116         assertEquals("test-tag", part2.getKey());
117         assertEquals("mytag", part2.getValue());
118 
119         PartResponse part3 = response.getMultiPartResponse().getResponsePart(2);
120         assertEquals("auto-collect", part3.getKey());
121         assertEquals("DEVICE_TRACE", part3.getValue());
122 
123         PartResponse part4 = response.getMultiPartResponse().getResponsePart(3);
124         assertEquals("auto-collect", part4.getKey());
125         assertEquals("LOGCAT_ON_FAILURE", part4.getValue());
126     }
127 }
128