diff --git a/src/main/java/com/bazel_diff/TargetHashingClient.java b/src/main/java/com/bazel_diff/TargetHashingClient.java index 5741073..2f7581c 100644 --- a/src/main/java/com/bazel_diff/TargetHashingClient.java +++ b/src/main/java/com/bazel_diff/TargetHashingClient.java @@ -166,13 +166,16 @@ private Map hashAllTargets(byte[] seedHash, Map(), "rule1Digest"); + BazelTarget target = createGeneratedTarget("rule0", "rule1"); + + List ruleInputs = new ArrayList<>(); + ruleInputs.add("rule0"); + BazelTarget rule3 = createRuleTarget("rule3", ruleInputs, "digest"); + + String oldHash = ""; + String newHash = ""; + + when(bazelClientMock.queryAllTargets()).thenReturn(Arrays.asList(rule3, target, generator)); + TargetHashingClientImpl client = new TargetHashingClientImpl(bazelClientMock, filesClientMock); + try { + Map hash = client.hashAllBazelTargetsAndSourcefiles(new HashSet<>()); + assertEquals(3, hash.size()); + oldHash = hash.get("rule3"); + } catch (IOException | NoSuchAlgorithmException e) { + fail(e.getMessage()); + } + + when(generator.getRule().getDigest()).thenReturn("newDigest".getBytes()); + try { + Map hash = client.hashAllBazelTargetsAndSourcefiles(new HashSet<>()); + assertEquals(3, hash.size()); + newHash = hash.get("rule3"); + } catch (IOException | NoSuchAlgorithmException e) { + fail(e.getMessage()); + } + + assertNotEquals(oldHash, newHash); + } + private BazelTarget createRuleTarget(String ruleName, List ruleInputs, String ruleDigest) throws NoSuchAlgorithmException { BazelTarget target = mock(BazelTarget.class); BazelRule rule = mock(BazelRule.class); @@ -149,4 +183,14 @@ private BazelSourceFileTarget createSourceFileTarget(String name, String digest) when(target.getDigest()).thenReturn(digest.getBytes()); return target; } + + private BazelTarget createGeneratedTarget(String name, String generatingRuleName) throws NoSuchAlgorithmException { + BazelTarget target = mock(BazelTarget.class); + when(target.hasRule()).thenReturn(false); + when(target.hasSourceFile()).thenReturn(false); + when(target.hasGeneratedFile()).thenReturn(true); + when(target.getGeneratedFileName()).thenReturn(name); + when(target.getGeneratingRuleName()).thenReturn(generatingRuleName); + return target; + } }