Differential D8438 Diff 30813 java/src/test/java/org/softwareheritage/graph/rpc/TraverseLeavesTest.java
Changeset View
Changeset View
Standalone View
Standalone View
java/src/test/java/org/softwareheritage/graph/rpc/TraverseLeavesTest.java
/* | /* | ||||
* Copyright (c) 2022 The Software Heritage developers | * Copyright (c) 2022 The Software Heritage developers | ||||
* See the AUTHORS file at the top-level directory of this distribution | * See the AUTHORS file at the top-level directory of this distribution | ||||
* License: GNU General Public License version 3, or any later version | * License: GNU General Public License version 3, or any later version | ||||
* See top-level LICENSE file for more information | * See top-level LICENSE file for more information | ||||
*/ | */ | ||||
package org.softwareheritage.graph.rpc; | package org.softwareheritage.graph.rpc; | ||||
import org.junit.jupiter.api.Test; | import org.junit.jupiter.api.Test; | ||||
import org.junit.jupiter.params.ParameterizedTest; | |||||
import org.junit.jupiter.params.provider.ValueSource; | |||||
import org.softwareheritage.graph.GraphTest; | import org.softwareheritage.graph.GraphTest; | ||||
import org.softwareheritage.graph.SWHID; | import org.softwareheritage.graph.SWHID; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
public class TraverseLeavesTest extends TraversalServiceTest { | public class TraverseLeavesTest extends TraversalServiceTest { | ||||
private TraversalRequest.Builder getLeavesRequestBuilder(SWHID src) { | private TraversalRequest.Builder getLeavesRequestBuilder(SWHID src) { | ||||
return TraversalRequest.newBuilder().addSrc(src.toString()) | return TraversalRequest.newBuilder().addSrc(src.toString()) | ||||
.setReturnNodes(NodeFilter.newBuilder().setMaxTraversalSuccessors(0).build()); | .setReturnNodes(NodeFilter.newBuilder().setMaxTraversalSuccessors(0).build()); | ||||
} | } | ||||
@Test | private void _checkForwardFromSnp(int limit, ArrayList<SWHID> actualLeaves) { | ||||
public void forwardFromSnp() { | |||||
TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("snp", 20)).build(); | |||||
ArrayList<SWHID> expectedLeaves = new ArrayList<>(); | ArrayList<SWHID> expectedLeaves = new ArrayList<>(); | ||||
expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000001")); | expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000001")); | ||||
expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000004")); | expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000004")); | ||||
expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000005")); | expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000005")); | ||||
expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000007")); | expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000007")); | ||||
ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | if (limit == 0) { | ||||
GraphTest.assertEqualsAnyOrder(expectedLeaves, actualLeaves); | GraphTest.assertEqualsAnyOrder(expectedLeaves, actualLeaves); | ||||
} else { | |||||
GraphTest.assertContainsAll(expectedLeaves, actualLeaves); | |||||
GraphTest.assertLength(Math.max(0, Math.min(limit, 4)), actualLeaves); | |||||
} | |||||
} | |||||
@Test | |||||
public void forwardFromSnp() { | |||||
TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("snp", 20)).build(); | |||||
ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | |||||
_checkForwardFromSnp(0, actualLeaves); | |||||
} | |||||
@ParameterizedTest | |||||
@ValueSource(ints = {0, 1, 2, 3, 4, 5, Integer.MAX_VALUE}) | |||||
public void forwardFromSnpWithLimit(int limit) { | |||||
TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("snp", 20)).setMaxMatchingNodes(limit).build(); | |||||
ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | |||||
_checkForwardFromSnp(limit, actualLeaves); | |||||
} | } | ||||
@Test | @Test | ||||
public void forwardFromRel() { | public void forwardFromRel() { | ||||
TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("rel", 19)).build(); | TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("rel", 19)).build(); | ||||
ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | ||||
ArrayList<SWHID> expectedLeaves = new ArrayList<>(); | ArrayList<SWHID> expectedLeaves = new ArrayList<>(); | ||||
expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000015")); | expectedLeaves.add(new SWHID("swh:1:cnt:0000000000000000000000000000000000000015")); | ||||
▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | public class TraverseLeavesTest extends TraversalServiceTest { | ||||
public void backwardCntToDirDirToDir() { | public void backwardCntToDirDirToDir() { | ||||
TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("cnt", 5)).setEdges("cnt:dir,dir:dir") | TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("cnt", 5)).setEdges("cnt:dir,dir:dir") | ||||
.setDirection(GraphDirection.BACKWARD).build(); | .setDirection(GraphDirection.BACKWARD).build(); | ||||
ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | ||||
ArrayList<SWHID> expectedLeaves = new ArrayList<>(); | ArrayList<SWHID> expectedLeaves = new ArrayList<>(); | ||||
expectedLeaves.add(new SWHID("swh:1:dir:0000000000000000000000000000000000000012")); | expectedLeaves.add(new SWHID("swh:1:dir:0000000000000000000000000000000000000012")); | ||||
GraphTest.assertEqualsAnyOrder(expectedLeaves, actualLeaves); | GraphTest.assertEqualsAnyOrder(expectedLeaves, actualLeaves); | ||||
} | } | ||||
@ParameterizedTest | |||||
@ValueSource(ints = {0, 1, 2, Integer.MAX_VALUE}) | |||||
public void backwardCntToDirDirToDirWithLimit(int limit) { | |||||
TraversalRequest request = getLeavesRequestBuilder(fakeSWHID("cnt", 5)).setEdges("cnt:dir,dir:dir") | |||||
.setDirection(GraphDirection.BACKWARD).setMaxMatchingNodes(limit).build(); | |||||
ArrayList<SWHID> actualLeaves = getSWHIDs(client.traverse(request)); | |||||
ArrayList<SWHID> expectedLeaves = new ArrayList<>(); | |||||
expectedLeaves.add(new SWHID("swh:1:dir:0000000000000000000000000000000000000012")); | |||||
GraphTest.assertEqualsAnyOrder(expectedLeaves, actualLeaves); | |||||
} | |||||
} | } |