• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 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 
17 package android.binder.cts;
18 
19 import android.os.Binder;
20 import android.os.IBinder;
21 import android.os.ParcelFileDescriptor;
22 import android.os.RemoteException;
23 import java.io.FileDescriptor;
24 import java.io.IOException;
25 import java.io.PrintWriter;
26 import java.util.concurrent.CountDownLatch;
27 import test_package.Bar;
28 import test_package.Baz;
29 import test_package.Foo;
30 import test_package.GenericBar;
31 import test_package.ICompatTest;
32 import test_package.IEmpty;
33 import test_package.ITest;
34 import test_package.RegularPolygon;
35 import test_package.ExtendableParcelable;
36 import test_package.MyExt;
37 import test_package.SimpleUnion;
38 
39 public class TestImpl extends ITest.Stub {
40   @Override
dump(FileDescriptor fd, PrintWriter pw, String[] args)41   protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
42     for (String arg : args) {
43       pw.print(arg);
44     }
45   }
46 
47   @Override
GetName()48   public String GetName() {
49     return "JAVA";
50   }
51 
52   @Override
TestVoidReturn()53   public void TestVoidReturn() {}
54 
55   @Override
TestOneway()56   public void TestOneway() throws RemoteException {
57     throw new RemoteException("Oneway call errors should be ignored");
58   }
59 
60   @Override
GiveMeMyCallingPid()61   public int GiveMeMyCallingPid() {
62     return Binder.getCallingPid();
63   }
64 
65   @Override
GiveMeMyCallingUid()66   public int GiveMeMyCallingUid() {
67     return Binder.getCallingUid();
68   }
69 
70   private CountDownLatch mCachedLatch = new CountDownLatch(1);
71   private int mCachedPid = -1;
72   private int mCachedUid = -1;
73 
waitForCachedOnewayInfo()74   private void waitForCachedOnewayInfo() {
75     try {
76       mCachedLatch.await();
77     } catch (InterruptedException e) {
78       // This thread is never expected to be interrupted during this test. This will be
79       // converted to a RemoteException on the other side and cause the test to fail.
80 
81       throw new RuntimeException(e.toString());
82     }
83   }
84 
85   @Override
CacheCallingInfoFromOneway()86   public void CacheCallingInfoFromOneway() {
87     mCachedPid = Binder.getCallingPid();
88     mCachedUid = Binder.getCallingUid();
89     mCachedLatch.countDown();
90   }
91 
92   @Override
GiveMeMyCallingPidFromOneway()93   public int GiveMeMyCallingPidFromOneway() {
94     waitForCachedOnewayInfo();
95     return mCachedPid;
96   }
97 
98   @Override
GiveMeMyCallingUidFromOneway()99   public int GiveMeMyCallingUidFromOneway() {
100     waitForCachedOnewayInfo();
101     return mCachedUid;
102   }
103 
104   @Override
RepeatInt(int in_value)105   public int RepeatInt(int in_value) {
106     return in_value;
107   }
108 
109   @Override
RepeatLong(long in_value)110   public long RepeatLong(long in_value) {
111     return in_value;
112   }
113 
114   @Override
RepeatFloat(float in_value)115   public float RepeatFloat(float in_value) {
116     return in_value;
117   }
118 
119   @Override
RepeatDouble(double in_value)120   public double RepeatDouble(double in_value) {
121     return in_value;
122   }
123 
124   @Override
RepeatBoolean(boolean in_value)125   public boolean RepeatBoolean(boolean in_value) {
126     return in_value;
127   }
128 
129   @Override
RepeatChar(char in_value)130   public char RepeatChar(char in_value) {
131     return in_value;
132   }
133 
134   @Override
RepeatByte(byte in_value)135   public byte RepeatByte(byte in_value) {
136     return in_value;
137   }
138 
139   @Override
RepeatByteEnum(byte in_value)140   public byte RepeatByteEnum(byte in_value) {
141     return in_value;
142   }
143 
144   @Override
RepeatIntEnum(int in_value)145   public int RepeatIntEnum(int in_value) {
146     return in_value;
147   }
148 
149   @Override
RepeatLongEnum(long in_value)150   public long RepeatLongEnum(long in_value) {
151     return in_value;
152   }
153 
154   @Override
RepeatBinder(IBinder in_value)155   public IBinder RepeatBinder(IBinder in_value) {
156     return in_value;
157   }
158 
159   @Override
RepeatNullableBinder(IBinder in_value)160   public IBinder RepeatNullableBinder(IBinder in_value) {
161     return in_value;
162   }
163 
164   @Override
RepeatInterface(IEmpty in_value)165   public IEmpty RepeatInterface(IEmpty in_value) {
166     return in_value;
167   }
168 
169   @Override
RepeatNullableInterface(IEmpty in_value)170   public IEmpty RepeatNullableInterface(IEmpty in_value) {
171     return in_value;
172   }
173 
174   @Override
RepeatFd(ParcelFileDescriptor in_value)175   public ParcelFileDescriptor RepeatFd(ParcelFileDescriptor in_value) {
176     return in_value;
177   }
178 
179   @Override
RepeatNullableFd(ParcelFileDescriptor in_value)180   public ParcelFileDescriptor RepeatNullableFd(ParcelFileDescriptor in_value) {
181     return in_value;
182   }
183 
184   @Override
RepeatString(String in_value)185   public String RepeatString(String in_value) {
186     return in_value;
187   }
188 
189   @Override
RepeatNullableString(String in_value)190   public String RepeatNullableString(String in_value) {
191     return in_value;
192   }
193 
194   @Override
RepeatPolygon(RegularPolygon in_value)195   public RegularPolygon RepeatPolygon(RegularPolygon in_value) {
196     return in_value;
197   }
198 
199   @Override
RepeatNullablePolygon(RegularPolygon in_value)200   public RegularPolygon RepeatNullablePolygon(RegularPolygon in_value) {
201     return in_value;
202   }
203 
204   @Override
RenamePolygon(RegularPolygon value, String name)205   public void RenamePolygon(RegularPolygon value, String name) {
206     value.name = name;
207   }
208 
209   @Override
RepeatBooleanArray(boolean[] in_value, boolean[] repeated)210   public boolean[] RepeatBooleanArray(boolean[] in_value, boolean[] repeated) {
211     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
212     return in_value;
213   }
214 
215   @Override
RepeatByteArray(byte[] in_value, byte[] repeated)216   public byte[] RepeatByteArray(byte[] in_value, byte[] repeated) {
217     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
218     return in_value;
219   }
220 
221   @Override
RepeatCharArray(char[] in_value, char[] repeated)222   public char[] RepeatCharArray(char[] in_value, char[] repeated) {
223     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
224     return in_value;
225   }
226 
227   @Override
RepeatIntArray(int[] in_value, int[] repeated)228   public int[] RepeatIntArray(int[] in_value, int[] repeated) {
229     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
230     return in_value;
231   }
232 
233   @Override
RepeatLongArray(long[] in_value, long[] repeated)234   public long[] RepeatLongArray(long[] in_value, long[] repeated) {
235     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
236     return in_value;
237   }
238 
239   @Override
RepeatFloatArray(float[] in_value, float[] repeated)240   public float[] RepeatFloatArray(float[] in_value, float[] repeated) {
241     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
242     return in_value;
243   }
244 
245   @Override
RepeatDoubleArray(double[] in_value, double[] repeated)246   public double[] RepeatDoubleArray(double[] in_value, double[] repeated) {
247     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
248     return in_value;
249   }
250 
251   @Override
RepeatByteEnumArray(byte[] in_value, byte[] repeated)252   public byte[] RepeatByteEnumArray(byte[] in_value, byte[] repeated) {
253     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
254     return in_value;
255   }
256 
257   @Override
RepeatIntEnumArray(int[] in_value, int[] repeated)258   public int[] RepeatIntEnumArray(int[] in_value, int[] repeated) {
259     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
260     return in_value;
261   }
262 
263   @Override
RepeatLongEnumArray(long[] in_value, long[] repeated)264   public long[] RepeatLongEnumArray(long[] in_value, long[] repeated) {
265     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
266     return in_value;
267   }
268 
269   @Override
RepeatStringArray(String[] in_value, String[] repeated)270   public String[] RepeatStringArray(String[] in_value, String[] repeated) {
271     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
272     return in_value;
273   }
274 
275   @Override
RepeatRegularPolygonArray(RegularPolygon[] in_value, RegularPolygon[] repeated)276   public RegularPolygon[] RepeatRegularPolygonArray(RegularPolygon[] in_value, RegularPolygon[] repeated) {
277     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
278     return in_value;
279   }
280 
281   @Override
RepeatFdArray(ParcelFileDescriptor[] in_value, ParcelFileDescriptor[] repeated)282   public ParcelFileDescriptor[] RepeatFdArray(ParcelFileDescriptor[] in_value, ParcelFileDescriptor[] repeated) {
283     ParcelFileDescriptor[] out = new ParcelFileDescriptor[in_value.length];
284     for (int i = 0; i < in_value.length; i++) {
285       try {
286         repeated[i] = in_value[i].dup();
287         out[i] = in_value[i].dup();
288       } catch (IOException e) {
289         e.printStackTrace();
290       }
291     }
292     return out;
293   }
294 
295   @Override
RepeatBinderArray(IBinder[] in_value, IBinder[] repeated)296   public IBinder[] RepeatBinderArray(IBinder[] in_value, IBinder[] repeated) {
297     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
298     return in_value;
299   }
300 
301   @Override
RepeatInterfaceArray(IEmpty[] in_value, IEmpty[] repeated)302   public IEmpty[] RepeatInterfaceArray(IEmpty[] in_value, IEmpty[] repeated) {
303     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
304     return in_value;
305   }
306 
Repeat2StringList(java.util.List<String> in_value, java.util.List<String> repeated)307   public java.util.List<String> Repeat2StringList(java.util.List<String> in_value, java.util.List<String> repeated) {
308     repeated.addAll(in_value);
309     repeated.addAll(in_value);
310     return repeated;
311   }
312 
313   @Override
Repeat2RegularPolygonList(java.util.List<RegularPolygon> in_value, java.util.List<RegularPolygon> repeated)314   public java.util.List<RegularPolygon> Repeat2RegularPolygonList(java.util.List<RegularPolygon> in_value, java.util.List<RegularPolygon> repeated) {
315     repeated.addAll(in_value);
316     repeated.addAll(in_value);
317     return repeated;
318   }
319 
320   @Override
RepeatNullableBooleanArray(boolean[] in_value)321   public boolean[] RepeatNullableBooleanArray(boolean[] in_value) {
322     return in_value;
323   }
324 
325   @Override
RepeatNullableByteArray(byte[] in_value)326   public byte[] RepeatNullableByteArray(byte[] in_value) {
327     return in_value;
328   }
329 
330   @Override
RepeatNullableCharArray(char[] in_value)331   public char[] RepeatNullableCharArray(char[] in_value) {
332     return in_value;
333   }
334 
335   @Override
RepeatNullableIntArray(int[] in_value)336   public int[] RepeatNullableIntArray(int[] in_value) {
337     return in_value;
338   }
339 
340   @Override
RepeatNullableLongArray(long[] in_value)341   public long[] RepeatNullableLongArray(long[] in_value) {
342     return in_value;
343   }
344 
345   @Override
RepeatNullableFloatArray(float[] in_value)346   public float[] RepeatNullableFloatArray(float[] in_value) {
347     return in_value;
348   }
349 
350   @Override
RepeatNullableDoubleArray(double[] in_value)351   public double[] RepeatNullableDoubleArray(double[] in_value) {
352     return in_value;
353   }
354 
355   @Override
RepeatNullableByteEnumArray(byte[] in_value)356   public byte[] RepeatNullableByteEnumArray(byte[] in_value) {
357     return in_value;
358   }
359 
360   @Override
RepeatNullableIntEnumArray(int[] in_value)361   public int[] RepeatNullableIntEnumArray(int[] in_value) {
362     return in_value;
363   }
364 
365   @Override
RepeatNullableLongEnumArray(long[] in_value)366   public long[] RepeatNullableLongEnumArray(long[] in_value) {
367     return in_value;
368   }
369 
370   @Override
RepeatNullableStringArray(String[] in_value)371   public String[] RepeatNullableStringArray(String[] in_value) {
372     return in_value;
373   }
374 
375   @Override
RepeatNullableBinderArray(IBinder[] in_value)376   public IBinder[] RepeatNullableBinderArray(IBinder[] in_value) {
377     return in_value;
378   }
379 
380   @Override
RepeatNullableInterfaceArray(IEmpty[] in_value)381   public IEmpty[] RepeatNullableInterfaceArray(IEmpty[] in_value) {
382     return in_value;
383   }
384 
385   @Override
DoubleRepeatNullableStringArray(String[] in_value, String[] repeated)386   public String[] DoubleRepeatNullableStringArray(String[] in_value, String[] repeated) {
387     if (in_value == null) {
388       return null; // can't do anything to repeated
389     }
390 
391     System.arraycopy(in_value, 0, repeated, 0, in_value.length);
392     return in_value;
393   }
394 
395   @Override
repeatFoo(Foo inFoo)396   public Foo repeatFoo(Foo inFoo) {
397     return inFoo;
398   }
399 
400   @Override
renameFoo(Foo foo, String name)401   public void renameFoo(Foo foo, String name) {
402     foo.a = name;
403   }
404 
405   @Override
renameBar(Foo foo, String name)406   public void renameBar(Foo foo, String name) {
407     if (foo.d == null) {
408       foo.d = new Bar();
409     }
410     foo.d.a = name;
411   }
412 
413   @Override
getF(Foo foo)414   public int getF(Foo foo) {
415     return foo.f;
416   }
417 
418   @Override
repeatGenericBar(GenericBar<Integer> bar)419   public GenericBar<Integer> repeatGenericBar(GenericBar<Integer> bar) {
420     return bar;
421   }
422 
423   @Override
RepeatExtendableParcelable(ExtendableParcelable in, ExtendableParcelable out)424   public void RepeatExtendableParcelable(ExtendableParcelable in, ExtendableParcelable out) {
425     RepeatExtendableParcelableWithoutExtension(in, out);
426     MyExt ext = in.ext.getParcelable(MyExt.class);
427     MyExt ext2 = new MyExt();
428     ext2.a = ext.a;
429     ext2.b = ext.b;
430     out.ext.setParcelable(ext2);
431   }
432 
433   @Override
RepeatExtendableParcelableWithoutExtension(ExtendableParcelable in, ExtendableParcelable out)434   public void RepeatExtendableParcelableWithoutExtension(ExtendableParcelable in, ExtendableParcelable out) {
435     out.a = in.a;
436     out.b = in.b;
437     out.c = in.c;
438   }
439 
RepeatSimpleUnion(SimpleUnion in_u)440   public SimpleUnion RepeatSimpleUnion(SimpleUnion in_u) {
441     return in_u;
442   }
443 
444   private static class CompatTest extends ICompatTest.Stub {
445     @Override
getInterfaceVersion()446     public int getInterfaceVersion() { return CompatTest.VERSION; }
447 
448     @Override
getInterfaceHash()449     public String getInterfaceHash() { return CompatTest.HASH; }
450 
451     @Override
repeatBaz(Baz inBaz)452     public Baz repeatBaz(Baz inBaz) {
453       return inBaz;
454     }
455 
456     @Override
RepeatStringNullableLater(String in_value)457     public String RepeatStringNullableLater(String in_value) {
458       return in_value;
459     }
460 
461     @Override
NewMethodThatReturns10()462     public int NewMethodThatReturns10() {
463       return 10;
464     }
465   }
466 
467   @Override
getICompatTest()468   public IBinder getICompatTest() {
469     return new CompatTest();
470   }
471 
472   @Override
getLegacyBinderTest()473   public IBinder getLegacyBinderTest() {
474     return new ILegacyBinder.Stub();
475   }
476 }
477