blob: da78b28d90e4a34d50ccd7e1b539b0a89bb99838 [file] [log] [blame]
/*
* Copyright (C) 2016, Christian Halstrick <christian.halstrick@sap.com> and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.lfs.lib;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.eclipse.jgit.lfs.LfsPointer;
import org.junit.Test;
/*
* Test LfsPointer file abstraction
*/
public class LFSPointerTest {
private static final String TEST_SHA256 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
@Test
public void testEncoding() throws IOException {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer ptr = new LfsPointer(id, 4);
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
ptr.encode(baos);
assertEquals(
"version https://git-lfs.github.com/spec/v1\noid sha256:"
+ TEST_SHA256 + "\nsize 4\n",
baos.toString(UTF_8.name()));
}
}
@Test
public void testReadValidLfsPointer() throws Exception {
String ptr = "version https://git-lfs.github.com/spec/v1\n"
+ "oid sha256:" + TEST_SHA256 + '\n'
+ "size 4\n";
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertEquals(lfs, LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadValidLfsPointerUnordered() throws Exception {
// This is actually not allowed per the spec, but JGit accepts it
// anyway.
String ptr = "version https://git-lfs.github.com/spec/v1\n"
+ "size 4\n"
+ "oid sha256:" + TEST_SHA256 + '\n';
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertEquals(lfs, LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadValidLfsPointerVersionNotFirst() throws Exception {
// This is actually not allowed per the spec, but JGit accepts it
// anyway.
String ptr = "oid sha256:" + TEST_SHA256 + '\n'
+ "size 4\n"
+ "version https://git-lfs.github.com/spec/v1\n";
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertEquals(lfs, LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadInvalidLfsPointer() throws Exception {
String cSource = "size_t someFunction(void *ptr); // Fake C source\n";
try (ByteArrayInputStream in = new ByteArrayInputStream(
cSource.getBytes(UTF_8))) {
assertNull("Is not a LFS pointer", LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadInvalidLfsPointer2() throws Exception {
String cSource = "size_t\nsomeFunction(void *ptr);\n// Fake C source\n";
try (ByteArrayInputStream in = new ByteArrayInputStream(
cSource.getBytes(UTF_8))) {
assertNull("Is not a LFS pointer", LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadInValidLfsPointerVersionWrong() throws Exception {
String ptr = "version https://git-lfs.example.org/spec/v1\n"
+ "oid sha256:" + TEST_SHA256 + '\n'
+ "size 4\n";
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertNull("Is not a LFS pointer", LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadInValidLfsPointerVersionTwice() throws Exception {
String ptr = "version https://git-lfs.github.com/spec/v1\n"
+ "version https://git-lfs.github.com/spec/v1\n"
+ "oid sha256:" + TEST_SHA256 + '\n'
+ "size 4\n";
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertNull("Is not a LFS pointer", LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadInValidLfsPointerVersionTwice2() throws Exception {
String ptr = "version https://git-lfs.github.com/spec/v1\n"
+ "oid sha256:" + TEST_SHA256 + '\n'
+ "version https://git-lfs.github.com/spec/v1\n"
+ "size 4\n";
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertNull("Is not a LFS pointer", LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadInValidLfsPointerOidTwice() throws Exception {
String ptr = "version https://git-lfs.github.com/spec/v1\n"
+ "oid sha256:" + TEST_SHA256 + '\n'
+ "oid sha256:" + TEST_SHA256 + '\n'
+ "size 4\n";
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertNull("Is not a LFS pointer", LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testReadInValidLfsPointerSizeTwice() throws Exception {
String ptr = "version https://git-lfs.github.com/spec/v1\n"
+ "size 4\n"
+ "size 4\n"
+ "oid sha256:" + TEST_SHA256 + '\n';
try (ByteArrayInputStream in = new ByteArrayInputStream(
ptr.getBytes(UTF_8))) {
assertNull("Is not a LFS pointer", LfsPointer.parseLfsPointer(in));
}
}
@Test
public void testRoundtrip() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer ptr = new LfsPointer(id, 4);
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
ptr.encode(baos);
try (ByteArrayInputStream in = new ByteArrayInputStream(
baos.toByteArray())) {
assertEquals(ptr, LfsPointer.parseLfsPointer(in));
}
}
}
@Test
public void testEquals() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs2 = new LfsPointer(id2, 4);
assertTrue(lfs.equals(lfs2));
assertTrue(lfs2.equals(lfs));
}
@Test
public void testEqualsNull() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
assertFalse(lfs.equals(null));
}
@Test
public void testEqualsSame() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
assertTrue(lfs.equals(lfs));
}
@Test
public void testEqualsOther() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
assertFalse(lfs.equals(new Object()));
}
@Test
public void testNotEqualsOid() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId
.fromString(TEST_SHA256.replace('7', '5'));
LfsPointer lfs2 = new LfsPointer(id2, 4);
assertFalse(lfs.equals(lfs2));
assertFalse(lfs2.equals(lfs));
}
@Test
public void testNotEqualsSize() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs2 = new LfsPointer(id2, 5);
assertFalse(lfs.equals(lfs2));
assertFalse(lfs2.equals(lfs));
}
@Test
public void testCompareToEquals() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs2 = new LfsPointer(id2, 4);
assertEquals(0, lfs.compareTo(lfs2));
assertEquals(0, lfs2.compareTo(lfs));
}
@Test
@SuppressWarnings("SelfComparison")
public void testCompareToSame() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
assertEquals(0, lfs.compareTo(lfs));
}
@Test
public void testCompareToNotEqualsOid() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId
.fromString(TEST_SHA256.replace('7', '5'));
LfsPointer lfs2 = new LfsPointer(id2, 4);
assertNotEquals(0, lfs.compareTo(lfs2));
assertNotEquals(0, lfs2.compareTo(lfs));
}
@Test
public void testCompareToNotEqualsSize() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs2 = new LfsPointer(id2, 5);
assertNotEquals(0, lfs.compareTo(lfs2));
assertNotEquals(0, lfs2.compareTo(lfs));
}
@Test
public void testCompareToNull() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
assertThrows(NullPointerException.class, () -> lfs.compareTo(null));
}
@Test
public void testHashcodeEquals() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs2 = new LfsPointer(id2, 4);
assertEquals(lfs.hashCode(), lfs2.hashCode());
}
@Test
public void testHashcodeSame() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
assertEquals(lfs.hashCode(), lfs.hashCode());
}
@Test
public void testHashcodeNotEquals() throws Exception {
AnyLongObjectId id = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs = new LfsPointer(id, 4);
AnyLongObjectId id2 = LongObjectId.fromString(TEST_SHA256);
LfsPointer lfs2 = new LfsPointer(id2, 5);
assertNotEquals(lfs.hashCode(), lfs2.hashCode());
}
}