diff options
Diffstat (limited to 'jimfs/src/test/java/com/google/common/jimfs/RegularFileBlocksTest.java')
-rw-r--r-- | jimfs/src/test/java/com/google/common/jimfs/RegularFileBlocksTest.java | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/jimfs/src/test/java/com/google/common/jimfs/RegularFileBlocksTest.java b/jimfs/src/test/java/com/google/common/jimfs/RegularFileBlocksTest.java new file mode 100644 index 0000000..1dc9df2 --- /dev/null +++ b/jimfs/src/test/java/com/google/common/jimfs/RegularFileBlocksTest.java @@ -0,0 +1,145 @@ +/* + * Copyright 2013 Google Inc. + * + * 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.common.jimfs; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.primitives.Bytes; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Tests for the lower-level operations dealing with the blocks of a {@link RegularFile}. + * + * @author Colin Decker + */ +@RunWith(JUnit4.class) +public class RegularFileBlocksTest { + + private RegularFile file; + + @Before + public void setUp() { + file = createFile(); + } + + private static RegularFile createFile() { + return RegularFile.create(-1, new HeapDisk(2, 2, 2)); + } + + @Test + public void testInitialState() { + assertThat(file.blockCount()).isEqualTo(0); + + // no bounds checking, but there should never be a block at an index >= size + assertThat(file.getBlock(0)).isNull(); + } + + @Test + public void testAddAndGet() { + file.addBlock(new byte[] {1}); + + assertThat(file.blockCount()).isEqualTo(1); + assertThat(Bytes.asList(file.getBlock(0))).isEqualTo(Bytes.asList(new byte[] {1})); + assertThat(file.getBlock(1)).isNull(); + + file.addBlock(new byte[] {1, 2}); + + assertThat(file.blockCount()).isEqualTo(2); + assertThat(Bytes.asList(file.getBlock(1))).isEqualTo(Bytes.asList(new byte[] {1, 2})); + assertThat(file.getBlock(2)).isNull(); + } + + @Test + public void testTruncate() { + file.addBlock(new byte[0]); + file.addBlock(new byte[0]); + file.addBlock(new byte[0]); + file.addBlock(new byte[0]); + + assertThat(file.blockCount()).isEqualTo(4); + + file.truncateBlocks(2); + + assertThat(file.blockCount()).isEqualTo(2); + assertThat(file.getBlock(2)).isNull(); + assertThat(file.getBlock(3)).isNull(); + assertThat(file.getBlock(0)).isNotNull(); + + file.truncateBlocks(0); + assertThat(file.blockCount()).isEqualTo(0); + assertThat(file.getBlock(0)).isNull(); + } + + @Test + public void testCopyTo() { + file.addBlock(new byte[] {1}); + file.addBlock(new byte[] {1, 2}); + RegularFile other = createFile(); + + assertThat(other.blockCount()).isEqualTo(0); + + file.copyBlocksTo(other, 2); + + assertThat(other.blockCount()).isEqualTo(2); + assertThat(other.getBlock(0)).isEqualTo(file.getBlock(0)); + assertThat(other.getBlock(1)).isEqualTo(file.getBlock(1)); + + file.copyBlocksTo(other, 1); // should copy the last block + + assertThat(other.blockCount()).isEqualTo(3); + assertThat(other.getBlock(2)).isEqualTo(file.getBlock(1)); + + other.copyBlocksTo(file, 3); + + assertThat(file.blockCount()).isEqualTo(5); + assertThat(file.getBlock(2)).isEqualTo(other.getBlock(0)); + assertThat(file.getBlock(3)).isEqualTo(other.getBlock(1)); + assertThat(file.getBlock(4)).isEqualTo(other.getBlock(2)); + } + + @Test + public void testTransferTo() { + file.addBlock(new byte[] {1}); + file.addBlock(new byte[] {1, 2}); + file.addBlock(new byte[] {1, 2, 3}); + RegularFile other = createFile(); + + assertThat(file.blockCount()).isEqualTo(3); + assertThat(other.blockCount()).isEqualTo(0); + + file.transferBlocksTo(other, 3); + + assertThat(file.blockCount()).isEqualTo(0); + assertThat(other.blockCount()).isEqualTo(3); + + assertThat(file.getBlock(0)).isNull(); + assertThat(Bytes.asList(other.getBlock(0))).isEqualTo(Bytes.asList(new byte[] {1})); + assertThat(Bytes.asList(other.getBlock(1))).isEqualTo(Bytes.asList(new byte[] {1, 2})); + assertThat(Bytes.asList(other.getBlock(2))).isEqualTo(Bytes.asList(new byte[] {1, 2, 3})); + + other.transferBlocksTo(file, 1); + + assertThat(file.blockCount()).isEqualTo(1); + assertThat(other.blockCount()).isEqualTo(2); + assertThat(other.getBlock(2)).isNull(); + assertThat(Bytes.asList(file.getBlock(0))).isEqualTo(Bytes.asList(new byte[] {1, 2, 3})); + assertThat(file.getBlock(1)).isNull(); + } +} |