1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/* 2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * contributor license agreements. See the NOTICE file distributed with 4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * this work for additional information regarding copyright ownership. 5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * (the "License"); you may not use this file except in compliance with 7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the License. You may obtain a copy of the License at 8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Unless required by applicable law or agreed to in writing, software 12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * See the License for the specific language governing permissions and 15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * limitations under the License. 16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.io; 19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestSuite; 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport org.apache.harmony.testframework.SinkTester; 22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport org.apache.harmony.testframework.WrapperTester; 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport tests.support.Streams; 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.BufferedOutputStream; 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayInputStream; 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayOutputStream; 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.DataOutputStream; 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.File; 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileInputStream; 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileOutputStream; 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FilterOutputStream; 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException; 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectInputStream; 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectOutputStream; 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.OutputStream; 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedInputStream; 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedOutputStream; 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PrintStream; 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.Callable; 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.ExecutorService; 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.Executors; 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.Future; 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/** 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Tests basic {@link OutputStream} behaviors for the luni implementations of 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the type. 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class OutputStreamTesterTest { 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 51ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamath // TODO: Rewrite this test so that id doesn't need a suite(). 52ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamath private static junit.framework.Test suite() { 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath TestSuite suite = new TestSuite(); 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // sink tests 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new FileOutputStreamSinkTester(true).createTests()); 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new FileOutputStreamSinkTester(false).createTests()); 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new ByteArrayOutputStreamSinkTester(0).setThrowsExceptions(false).createTests()); 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new ByteArrayOutputStreamSinkTester(4).setThrowsExceptions(false).createTests()); 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new PipedOutputStreamSinkTester().createTests()); 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // wrapper tests 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new BufferedOutputStreamTester(1).createTests()); 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new BufferedOutputStreamTester(5).createTests()); 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new BufferedOutputStreamTester(1024).createTests()); 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new FilterOutputStreamTester().createTests()); 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new DataOutputStreamTester().createTests()); 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // fails wrapperTestFlushThrowsViaClose() and sinkTestWriteAfterClose(): 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // suite.addTest(new ObjectOutputStreamTester().createTests()); 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath suite.addTest(new PrintStreamTester().setThrowsExceptions(false).createTests()); 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return suite; 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class FileOutputStreamSinkTester extends SinkTester { 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private final boolean append; 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private File file; 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private FileOutputStreamSinkTester(boolean append) { 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.append = append; 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create() throws IOException { 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath file = File.createTempFile("FileOutputStreamSinkTester", "tmp"); 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath file.deleteOnExit(); 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return new FileOutputStream(file, append); 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] getBytes() throws IOException { 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return Streams.streamToBytes(new FileInputStream(file)); 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class ByteArrayOutputStreamSinkTester extends SinkTester { 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private final int size; 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private ByteArrayOutputStream stream; 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private ByteArrayOutputStreamSinkTester(int size) { 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.size = size; 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create() throws IOException { 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath stream = new ByteArrayOutputStream(size); 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return stream; 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] getBytes() throws IOException { 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return stream.toByteArray(); 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class PipedOutputStreamSinkTester extends SinkTester { 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private ExecutorService executor; 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private Future<byte[]> future; 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create() throws IOException { 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final PipedInputStream in = new PipedInputStream(); 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath PipedOutputStream out = new PipedOutputStream(in); 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath executor = Executors.newSingleThreadExecutor(); 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath future = executor.submit(new Callable<byte[]>() { 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] call() throws Exception { 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath byte[] buffer = new byte[256]; 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int count; 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while ((count = in.read(buffer)) != -1) { 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bytes.write(buffer, 0, count); 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return bytes.toByteArray(); 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath }); 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return out; 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] getBytes() throws Exception { 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath executor.shutdown(); 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return future.get(); 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class FilterOutputStreamTester extends WrapperTester { 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create(OutputStream delegate) throws Exception { 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return new FilterOutputStream(delegate); 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] decode(byte[] delegateBytes) throws Exception { 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return delegateBytes; 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class BufferedOutputStreamTester extends WrapperTester { 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private final int bufferSize; 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private BufferedOutputStreamTester(int bufferSize) { 161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.bufferSize = bufferSize; 162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create(OutputStream delegate) throws Exception { 165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return new BufferedOutputStream(delegate, bufferSize); 166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] decode(byte[] delegateBytes) throws Exception { 169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return delegateBytes; 170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class DataOutputStreamTester extends WrapperTester { 174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create(OutputStream delegate) throws Exception { 176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return new DataOutputStream(delegate); 177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] decode(byte[] delegateBytes) throws Exception { 180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return delegateBytes; 181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class ObjectOutputStreamTester extends WrapperTester { 185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create(OutputStream delegate) throws Exception { 187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return new ObjectOutputStream(delegate); 188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] decode(byte[] delegateBytes) throws Exception { 191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return Streams.streamToBytes(new ObjectInputStream( 192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new ByteArrayInputStream(delegateBytes))); 193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static class PrintStreamTester extends WrapperTester { 197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public OutputStream create(OutputStream delegate) throws Exception { 199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return new PrintStream(delegate); 200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public byte[] decode(byte[] delegateBytes) throws Exception { 203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return delegateBytes; 204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 207