| // Copyright (C) 2009 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.gerrit.server.ioutil; |
| |
| import static com.google.gerrit.server.ioutil.BasicSerialization.readFixInt64; |
| import static com.google.gerrit.server.ioutil.BasicSerialization.readString; |
| import static com.google.gerrit.server.ioutil.BasicSerialization.readVarInt32; |
| import static com.google.gerrit.server.ioutil.BasicSerialization.writeFixInt64; |
| import static com.google.gerrit.server.ioutil.BasicSerialization.writeString; |
| import static com.google.gerrit.server.ioutil.BasicSerialization.writeVarInt32; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNull; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import org.junit.Test; |
| |
| public class BasicSerializationTest { |
| @Test |
| public void testReadVarInt32() throws IOException { |
| assertEquals(0x00000000, readVarInt32(r(b(0)))); |
| assertEquals(0x00000003, readVarInt32(r(b(3)))); |
| assertEquals(0x000000ff, readVarInt32(r(b(0x80 | 0x7f, 0x01)))); |
| } |
| |
| @Test |
| public void testWriteVarInt32() throws IOException { |
| ByteArrayOutputStream out; |
| |
| out = new ByteArrayOutputStream(); |
| writeVarInt32(out, 0); |
| assertOutput(b(0), out); |
| |
| out = new ByteArrayOutputStream(); |
| writeVarInt32(out, 3); |
| assertOutput(b(3), out); |
| |
| out = new ByteArrayOutputStream(); |
| writeVarInt32(out, 0xff); |
| assertOutput(b(0x80 | 0x7f, 0x01), out); |
| } |
| |
| @Test |
| public void testReadFixInt64() throws IOException { |
| assertEquals(0L, readFixInt64(r(b(0, 0, 0, 0, 0, 0, 0, 0)))); |
| assertEquals(3L, readFixInt64(r(b(0, 0, 0, 0, 0, 0, 0, 3)))); |
| |
| assertEquals(0xdeadbeefL, readFixInt64(r(b(0, 0, 0, 0, 0xde, 0xad, 0xbe, 0xef)))); |
| |
| assertEquals(0x0310adefL, readFixInt64(r(b(0, 0, 0, 0, 0x03, 0x10, 0xad, 0xef)))); |
| |
| assertEquals( |
| 0xc0ffee78deadbeefL, readFixInt64(r(b(0xc0, 0xff, 0xee, 0x78, 0xde, 0xad, 0xbe, 0xef)))); |
| |
| assertEquals(0x00000000ffffffffL, readFixInt64(r(b(0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff)))); |
| |
| assertEquals( |
| 0xffffffffffffffffL, readFixInt64(r(b(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)))); |
| } |
| |
| @Test |
| public void testWriteFixInt64() throws IOException { |
| ByteArrayOutputStream out; |
| |
| out = new ByteArrayOutputStream(8); |
| writeFixInt64(out, 0L); |
| assertOutput(b(0, 0, 0, 0, 0, 0, 0, 0), out); |
| |
| out = new ByteArrayOutputStream(8); |
| writeFixInt64(out, 3L); |
| assertOutput(b(0, 0, 0, 0, 0, 0, 0, 3), out); |
| |
| out = new ByteArrayOutputStream(8); |
| writeFixInt64(out, 0xdeacL); |
| assertOutput(b(0, 0, 0, 0, 0, 0, 0xde, 0xac), out); |
| |
| out = new ByteArrayOutputStream(8); |
| writeFixInt64(out, 0xdeac9853L); |
| assertOutput(b(0, 0, 0, 0, 0xde, 0xac, 0x98, 0x53), out); |
| |
| out = new ByteArrayOutputStream(8); |
| writeFixInt64(out, 0xac431242deac9853L); |
| assertOutput(b(0xac, 0x43, 0x12, 0x42, 0xde, 0xac, 0x98, 0x53), out); |
| |
| out = new ByteArrayOutputStream(8); |
| writeFixInt64(out, -1L); |
| assertOutput(b(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff), out); |
| } |
| |
| @Test |
| public void testReadString() throws IOException { |
| assertNull(readString(r(b(0)))); |
| assertEquals("a", readString(r(b(1, 'a')))); |
| assertEquals("coffee4", readString(r(b(7, 'c', 'o', 'f', 'f', 'e', 'e', '4')))); |
| } |
| |
| @Test |
| public void testWriteString() throws IOException { |
| ByteArrayOutputStream out; |
| |
| out = new ByteArrayOutputStream(); |
| writeString(out, null); |
| assertOutput(b(0), out); |
| |
| out = new ByteArrayOutputStream(); |
| writeString(out, ""); |
| assertOutput(b(0), out); |
| |
| out = new ByteArrayOutputStream(); |
| writeString(out, "a"); |
| assertOutput(b(1, 'a'), out); |
| |
| out = new ByteArrayOutputStream(); |
| writeString(out, "coffee4"); |
| assertOutput(b(7, 'c', 'o', 'f', 'f', 'e', 'e', '4'), out); |
| } |
| |
| private static void assertOutput(byte[] expect, ByteArrayOutputStream out) { |
| final byte[] buf = out.toByteArray(); |
| for (int i = 0; i < expect.length; i++) { |
| assertEquals(expect[i], buf[i]); |
| } |
| } |
| |
| private static InputStream r(byte[] buf) { |
| return new ByteArrayInputStream(buf); |
| } |
| |
| private static byte[] b(int a) { |
| return new byte[] {(byte) a}; |
| } |
| |
| private static byte[] b(int a, int b) { |
| return new byte[] {(byte) a, (byte) b}; |
| } |
| |
| private static byte[] b(int a, int b, int c, int d, int e, int f, int g, int h) { |
| return new byte[] { |
| (byte) a, (byte) b, (byte) c, (byte) d, // |
| (byte) e, (byte) f, (byte) g, (byte) h, |
| }; |
| } |
| } |