1f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme/**
2f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Copyright (c) 2016, The Android Open Source Project
3f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme *
4f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Licensed under the Apache License, Version 2.0 (the "License");
5f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * you may not use this file except in compliance with the License.
6f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * You may obtain a copy of the License at
7f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme *
8f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme *     http://www.apache.org/licenses/LICENSE-2.0
9f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme *
10f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Unless required by applicable law or agreed to in writing, software
11f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * distributed under the License is distributed on an "AS IS" BASIS,
12f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * See the License for the specific language governing permissions and
14f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * limitations under the License.
15f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */
16f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
17f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemepackage com.android.server.utils;
18f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
19f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport static com.android.server.utils.PriorityDump.dump;
20f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
21f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport static org.junit.Assert.assertSame;
22e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nairimport static org.junit.Assert.assertArrayEquals;
23f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport static org.mockito.Matchers.eq;
24f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport static org.mockito.Matchers.same;
25f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport static org.mockito.Mockito.verify;
26f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
27f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport android.platform.test.annotations.Presubmit;
28f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport android.support.test.filters.SmallTest;
29f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport com.android.server.utils.PriorityDump.PriorityDumper;
30f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
31f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport org.junit.Before;
32f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport org.junit.Test;
33f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport org.junit.runner.RunWith;
34f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport org.junit.runners.JUnit4;
35f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport org.mockito.Mock;
36f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport org.mockito.MockitoAnnotations;
37f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
38f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport java.io.FileDescriptor;
39f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport java.io.PrintWriter;
40f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
41f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme@SmallTest
42f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme@Presubmit
43f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme@RunWith(JUnit4.class)
44f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemepublic class PriorityDumpTest {
45f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
46f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    private static final String[] EMPTY_ARGS = {};
47f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
48f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Mock
49f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    private PriorityDumper mDumper;
50f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Mock
51f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    private PrintWriter mPw;
52f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
53f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    private final FileDescriptor mFd = FileDescriptor.err;
54f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
55f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Before
56f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void setup() {
57f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        MockitoAnnotations.initMocks(this);
58f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
59f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
60f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
61f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testNullArgs() {
62f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, null);
63e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw), eq(null), /* asProto= */ eq(false));
64f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
65f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
66f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
67f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testNoArgs() {
68f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, EMPTY_ARGS);
69e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw), eq(EMPTY_ARGS), /* asProto= */ eq(false));
70f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
71f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
72f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
73f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testNonPriorityArgs() {
74f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        final String[] args = {
75f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme                "--dumb_priority"
76f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        };
77f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, args);
78e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw), eq(args), /* asProto= */ eq(false));
79f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
80f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
81f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
82f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testMissingPriority() {
83f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        final String[] args = {
84f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority"
85f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        };
86f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, args);
87e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw), eq(EMPTY_ARGS), /* asProto= */ eq(false));
88f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
89f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
90f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
91f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testInvalidPriorityNoExtraArgs() {
92f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        final String[] args = {
93f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "SUPER_HIGH"
94f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        };
95f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, args);
96e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw), eq(EMPTY_ARGS), /* asProto= */ eq(false));
97f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
98f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
99f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
100f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testInvalidPriorityExtraArgs() {
101f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        final String[] args = {
102f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "SUPER_HIGH", "--high", "--five"
103f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        };
104f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, args);
105e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw), eq(new String[] {
106e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair            "--high", "--five"
107e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        }), /* asProto= */ eq(false));
108f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
109f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
110f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
111f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testNoPriorityCallsAllMethods() {
112f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        final String[] args = {
113f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme                "1", "2", "3"
114f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        };
115f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
116f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        // Cannot use mDumper here because it would mock the dump() call.
117f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        final FakeDumper fakeDumper = new FakeDumper();
118f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
119f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(fakeDumper, mFd, mPw, args);
120f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
121f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        assertSame(mFd, fakeDumper.criticalFd);
122f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        assertSame(mPw, fakeDumper.criticalPw);
123e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        assertArrayEquals(args, fakeDumper.criticalArgs);
124f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        assertSame(mFd, fakeDumper.highFd);
125f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        assertSame(mPw, fakeDumper.highPw);
126e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        assertArrayEquals(args, fakeDumper.highArgs);
127f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        assertSame(mFd, fakeDumper.normalFd);
128f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        assertSame(mPw, fakeDumper.normalPw);
129e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        assertArrayEquals(args, fakeDumper.normalArgs);
130f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
131f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
132f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
133f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testCriticalNoExtraArgs() {
134f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, new String[] {
135f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "CRITICAL"
136f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        });
137e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpCritical(same(mFd), same(mPw), eq(EMPTY_ARGS),
138e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                /* asProto= */ eq(false));
139f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
140f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
141f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
142f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testCriticalExtraArgs() {
143f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, new String[] {
144f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "CRITICAL", "--high", "--five"
145f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        });
146f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        verify(mDumper).dumpCritical(same(mFd), same(mPw), eq(new String[] {
147f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme                "--high", "--five"
148e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        }), /* asProto= */ eq(false));
149e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
150e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
151e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
152e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testCriticalExtraArgsInMiddle() {
153e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[] {
154e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                "--high", "--dump-priority", "CRITICAL", "--five"
155e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        });
156e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpCritical(same(mFd), same(mPw), eq(new String[] {
157e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                "--high", "--five"
158e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        }), /* asProto= */ eq(false));
159e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
160e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
161e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
162e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testCriticalExtraArgsAtEnd() {
163e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[] {
164e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                "--high", "--five", "--dump-priority", "CRITICAL"
165e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        });
166e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpCritical(same(mFd), same(mPw), eq(new String[] {
167e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                "--high", "--five"
168e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        }), /* asProto= */ eq(false));
169f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
170f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
171f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
172f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testHighNoExtraArgs() {
173f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, new String[] {
174f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "HIGH"
175f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        });
176e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpHigh(same(mFd), same(mPw), eq(EMPTY_ARGS), /* asProto= */ eq(false));
177f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
178f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
179f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
180f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testHighExtraArgs() {
181f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, new String[] {
182f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "HIGH", "--high", "--five"
183f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        });
184f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        verify(mDumper).dumpHigh(same(mFd), same(mPw), eq(new String[] {
185f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme                "--high", "--five"
186e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        }), /* asProto= */ eq(false));
187f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
188f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
189f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
190f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testNormalNoExtraArgs() {
191f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        dump(mDumper, mFd, mPw, new String[] {
192f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "NORMAL"
193f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        });
194e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpNormal(same(mFd), same(mPw), eq(EMPTY_ARGS), /* asProto= */ eq(false));
195f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
196f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
197f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    @Test
198f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    public void testNormalExtraArgs() {
199e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[]{
200f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair                "--dump-priority", "NORMAL", "--high", "--five"
201f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        });
202e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpNormal(same(mFd), same(mPw), eq(new String[]{
203f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme                "--high", "--five"
204e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        }), /* asProto= */ eq(false));
205e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
206e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
207e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
208e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testProtoArgs() {
209e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[]{"--proto"});
210e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw), eq(EMPTY_ARGS), /* asProto= */ eq(true));
211e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
212e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
213e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
214e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testProtoArgsWithPriorityArgs() {
215e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[]{"--proto", "--dump-priority", "NORMAL", "--five"});
216e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpNormal(same(mFd), same(mPw),
217e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                eq(new String[]{"--five"}), /* asProto= */ eq(true));
218e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
219e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
220e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
221e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testProtoArgsWithPriorityArgsReverseOrder() {
222e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[]{"--dump-priority", "NORMAL", "--proto", "--five"});
223e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dumpNormal(same(mFd), same(mPw),
224e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                eq(new String[]{"--five"}), /* asProto= */ eq(true));
225e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
226e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
227e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
228e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testProtoArgsInMiddle() {
229e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[]{"--unknown", "--proto", "--five"});
230e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw),
231e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                eq(new String[]{"--unknown", "--five"}), /* asProto= */ eq(true));
232e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
233e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
234e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
235e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testProtoArgsAtEnd() {
236e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[]{"args", "-left", "--behind", "--proto"});
237e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw),
238e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                eq(new String[]{"args", "-left", "--behind"}), /* asProto= */ eq(true));
239e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    }
240e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair
241e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    @Test
242e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair    public void testProtoArgsWithInvalidPriorityType() {
243e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        dump(mDumper, mFd, mPw, new String[]{"--dump-priority", "HIGH?", "--proto"});
244e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        verify(mDumper).dump(same(mFd), same(mPw),
245e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                eq(EMPTY_ARGS), /* asProto= */ eq(true));
246f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
247f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
248f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    private final class FakeDumper implements PriorityDumper {
249f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
250f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        String[] criticalArgs, highArgs, normalArgs;
251f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        FileDescriptor criticalFd, highFd, normalFd;
252f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        PrintWriter criticalPw, highPw, normalPw;
253f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
254f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        @Override
255e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        public void dumpCritical(FileDescriptor fd, PrintWriter pw, String[] args,
256e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair                boolean asProto) {
257f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            criticalFd = fd;
258f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            criticalPw = pw;
259f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            criticalArgs = args;
260f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        }
261f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
262f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        @Override
263e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        public void dumpHigh(FileDescriptor fd, PrintWriter pw, String[] args, boolean asProto) {
264f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            highFd = fd;
265f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            highPw = pw;
266f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            highArgs = args;
267f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        }
268f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme
269f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        @Override
270e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair        public void dumpNormal(FileDescriptor fd, PrintWriter pw, String[] args, boolean asProto) {
271f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            normalFd = fd;
272f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            normalPw = pw;
273f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme            normalArgs = args;
274f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme        }
275f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme    }
276f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme}
277