/*
* This file is part of Fim - File Integrity Manager
*
* Copyright (C) 2017 Etienne Vrignaud
*
* Fim is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Fim is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Fim. If not, see <http://www.gnu.org/licenses/>.
*/
package org.fim.model;
import org.fim.tooling.ObjectAssert;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
public class FileStateTest {
private FileState a1;
private FileState a2;
private FileState b;
@Before
public void setUp() {
a1 = new FileState("file_1", 1L, new FileTime(1_000L), new FileHash("1", "11", "111"), Arrays.asList(new Attribute("n1", "v1"), new Attribute("n2", "v2"), new Attribute("n3", "v3")));
a2 = new FileState("file_1", 1L, new FileTime(1_000L), new FileHash("1", "11", "111"), Arrays.asList(new Attribute("n3", "v3"), new Attribute("n2", "v2"), new Attribute("n1", "v1")));
b = new FileState("file_2", 2L, new FileTime(2_000L), new FileHash("2", "22", "222"), Arrays.asList(new Attribute("n1", "v1"), new Attribute("n2", "v2"), new Attribute("n3", "v3")));
}
@Test
public void equalsIsWorking() {
ObjectAssert.equalsIsWorking(a1, a2, b);
}
@Test
public void hashcodeIsWorking() {
ObjectAssert.hashcodeIsWorking(a1, a2, b);
}
@Test
public void longHashcodeIsWorking() {
assertThat(a1.longHashCode()).isEqualTo(a2.longHashCode());
assertThat(a1.longHashCode()).isNotEqualTo(b.longHashCode());
}
@Test
public void allTheFileTimesAreTakenInAccount() {
a1 = new FileState("file_1", 1L, new FileTime(10_000L, 20_000L), new FileHash("1", "11", "111"), null);
a2 = new FileState("file_1", 1L, new FileTime(10_000L, 20_000L), new FileHash("1", "11", "111"), null);
assertThat(a1).isEqualTo(a2);
assertThat(a1.longHashCode()).isEqualTo(a2.longHashCode());
assertThat(a1.hashCode()).isEqualTo(a2.hashCode());
a2.getFileTime().setCreationTime(11_000L);
assertThat(a1).isNotEqualTo(a2);
assertThat(a1.longHashCode()).isNotEqualTo(a2.longHashCode());
assertThat(a1.hashCode()).isNotEqualTo(a2.hashCode());
a2.getFileTime().setCreationTime(10_000L);
a2.getFileTime().setLastModified(21_000L);
assertThat(a1).isNotEqualTo(a2);
assertThat(a1.longHashCode()).isNotEqualTo(a2.longHashCode());
assertThat(a1.hashCode()).isNotEqualTo(a2.hashCode());
}
@Test
public void millisecondsIgnoredInSomeCases() {
a1 = new FileState("file_1", 1L, new FileTime(10_000L, 20_000L), new FileHash("1", "11", "111"), null);
a2 = new FileState("file_1", 1L, new FileTime(10_000L, 20_000L), new FileHash("1", "11", "111"), null);
assertThat(a1).isEqualTo(a2);
assertThat(a1.longHashCode()).isEqualTo(a2.longHashCode());
assertThat(a1.hashCode()).isEqualTo(a2.hashCode());
a2.getFileTime().setCreationTime(10_001L);
assertThat(a1).isEqualTo(a2);
assertThat(a1.longHashCode()).isEqualTo(a2.longHashCode());
assertThat(a1.hashCode()).isNotEqualTo(a2.hashCode());
a2.getFileTime().setCreationTime(10_000L);
a2.getFileTime().setLastModified(20_001L);
assertThat(a1).isEqualTo(a2);
assertThat(a1.longHashCode()).isEqualTo(a2.longHashCode());
assertThat(a1.hashCode()).isNotEqualTo(a2.hashCode());
}
}