1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file.
4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochpackage org.chromium.cronet_sample_apk;
6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport android.test.InstrumentationTestCase;
8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport android.test.suitebuilder.annotation.SmallTest;
9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport org.chromium.base.test.util.Feature;
11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport org.chromium.net.ChunkedWritableByteChannel;
12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.io.IOException;
14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.nio.ByteBuffer;
15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.nio.channels.ClosedChannelException;
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.nio.charset.Charset;
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport java.util.Arrays;
18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch/**
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch * Tests for {@link ChunkedWritableByteChannel}
21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch */
22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochpublic class ChunkedWritableByteChannelTest extends InstrumentationTestCase {
23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    private ChunkedWritableByteChannel mChannel;
24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @Override
26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    public void setUp() {
27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel = new ChunkedWritableByteChannel();
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    }
29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @SmallTest
31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @Feature({"Cronet"})
32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    public void testSetCapacity() {
33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        int capacity = 100;
34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.setCapacity(capacity);
35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        assertEquals("Bytebuffer capacity wasn't set properly", capacity,
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                mChannel.getByteBuffer().capacity());
37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.close();
38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    }
39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @SmallTest
41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @Feature({"Cronet"})
42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    public void testWrite() throws IOException {
43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        String test = "Write in the buffer.";
44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.write(
45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                ByteBuffer.wrap(test.getBytes(Charset.forName("UTF-8"))));
46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.write(
47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                ByteBuffer.wrap(test.getBytes(Charset.forName("UTF-8"))));
48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        assertEquals("Buffer didn't write the bytes properly", test + test,
49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                new String(mChannel.getBytes(), "UTF-8"));
50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.close();
51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    }
52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @SmallTest
54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @Feature({"Cronet"})
55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    public void testCloseChannel() {
56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        assertTrue("Channel should be open", mChannel.isOpen());
57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.close();
58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        assertFalse("Channel shouldn't be open", mChannel.isOpen());
59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    }
60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @SmallTest
62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @Feature({"Cronet"})
63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    public void testWriteToClosedChannel() throws IOException {
64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        try {
65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch            mChannel.close();
66e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch            mChannel.write(ByteBuffer.wrap(new byte[1]));
67e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch            fail("ClosedChannelException should have been thrown.");
68e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        } catch (ClosedChannelException e) {
69e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch            // Intended
70e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        }
71e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    }
72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @SmallTest
74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    @Feature({"Cronet"})
75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    public void testCapacityGrows() throws Exception {
76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.setCapacity(123);
77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        byte[] data = new byte[1234];
78e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        Arrays.fill(data, (byte)'G');
79e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        mChannel.write(ByteBuffer.wrap(data));
80e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        assertTrue(Arrays.equals(data, mChannel.getBytes()));
81e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    }
82e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
83