diff --git a/model/src/test/java/de/cotto/lndmanagej/model/PolicyTest.java b/model/src/test/java/de/cotto/lndmanagej/model/PolicyTest.java index f79247aa..ace61bd3 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/PolicyTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/PolicyTest.java @@ -4,17 +4,18 @@ import org.junit.jupiter.api.Test; import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_1; import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_DISABLED; +import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_WITH_BASE_FEE; import static org.assertj.core.api.Assertions.assertThat; class PolicyTest { @Test void feeRate() { - assertThat(POLICY_1.feeRate()).isEqualTo(100L); + assertThat(POLICY_1.feeRate()).isEqualTo(200L); } @Test void baseFee() { - assertThat(POLICY_1.baseFee()).isEqualTo(Coins.ofMilliSatoshis(10)); + assertThat(POLICY_WITH_BASE_FEE.baseFee()).isEqualTo(Coins.ofMilliSatoshis(10)); } @Test diff --git a/model/src/testFixtures/java/de/cotto/lndmanagej/model/PolicyFixtures.java b/model/src/testFixtures/java/de/cotto/lndmanagej/model/PolicyFixtures.java index 8c66c80b..a42691f6 100644 --- a/model/src/testFixtures/java/de/cotto/lndmanagej/model/PolicyFixtures.java +++ b/model/src/testFixtures/java/de/cotto/lndmanagej/model/PolicyFixtures.java @@ -1,9 +1,10 @@ package de.cotto.lndmanagej.model; public class PolicyFixtures { - public static final Policy POLICY_1 = new Policy(100, Coins.ofMilliSatoshis(10), true); - public static final Policy POLICY_DISABLED = new Policy(100, Coins.ofMilliSatoshis(10), false); - public static final Policy POLICY_2 = new Policy(222, Coins.ofMilliSatoshis(0), true); + public static final Policy POLICY_1 = new Policy(200, Coins.NONE, true); + public static final Policy POLICY_WITH_BASE_FEE = new Policy(200, Coins.ofMilliSatoshis(10), true); + public static final Policy POLICY_DISABLED = new Policy(200, Coins.NONE, false); + public static final Policy POLICY_2 = new Policy(300, Coins.ofMilliSatoshis(0), true); public static final PoliciesForLocalChannel POLICIES_FOR_LOCAL_CHANNEL = new PoliciesForLocalChannel(POLICY_DISABLED, POLICY_2); diff --git a/pickhardt-payments/src/main/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputation.java b/pickhardt-payments/src/main/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputation.java index 9cc73314..c7cc71e9 100644 --- a/pickhardt-payments/src/main/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputation.java +++ b/pickhardt-payments/src/main/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputation.java @@ -7,6 +7,7 @@ import de.cotto.lndmanagej.grpc.GrpcGraph; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.DirectedChannelEdge; +import de.cotto.lndmanagej.model.Policy; import de.cotto.lndmanagej.model.Pubkey; import de.cotto.lndmanagej.pickhardtpayments.model.Edge; import de.cotto.lndmanagej.pickhardtpayments.model.EdgeWithLiquidityInformation; @@ -77,7 +78,7 @@ public class EdgeComputation { Set edgesWithLiquidityInformation = new LinkedHashSet<>(); Pubkey ownPubkey = grpcGetInfo.getPubkey(); for (DirectedChannelEdge channelEdge : channelEdges) { - if (channelEdge.policy().disabled()) { + if (shouldIgnore(channelEdge)) { continue; } ChannelId channelId = channelEdge.channelId(); @@ -89,6 +90,11 @@ public class EdgeComputation { return edgesWithLiquidityInformation; } + private boolean shouldIgnore(DirectedChannelEdge channelEdge) { + Policy policy = channelEdge.policy(); + return policy.disabled() || policy.baseFee().isPositive(); + } + private Optional getKnownLiquidity(Edge edge, Pubkey ownPubKey) { Pubkey source = edge.startNode(); ChannelId channelId = edge.channelId(); diff --git a/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputationTest.java b/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputationTest.java index 4ceaff5c..b9144d1c 100644 --- a/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputationTest.java +++ b/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/EdgeComputationTest.java @@ -23,6 +23,7 @@ import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL; import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_1; import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_DISABLED; +import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_WITH_BASE_FEE; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_4; @@ -70,6 +71,14 @@ class EdgeComputationTest { assertThat(edgeComputation.getEdges()).isEmpty(); } + @Test + void does_not_add_edge_for_channel_with_base_fee() { + DirectedChannelEdge edge = + new DirectedChannelEdge(CHANNEL_ID, CAPACITY, PUBKEY, PUBKEY_2, POLICY_WITH_BASE_FEE); + when(grpcGraph.getChannelEdges()).thenReturn(Optional.of(Set.of(edge))); + assertThat(edgeComputation.getEdges()).isEmpty(); + } + @Test void adds_liquidity_information_for_local_channel_as_source() { mockEdge(); diff --git a/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/model/RouteTest.java b/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/model/RouteTest.java index 8ee1b566..0187da5a 100644 --- a/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/model/RouteTest.java +++ b/pickhardt-payments/src/test/java/de/cotto/lndmanagej/pickhardtpayments/model/RouteTest.java @@ -168,7 +168,7 @@ class RouteTest { EdgeWithLiquidityInformation.forUpperBound(EDGE, Coins.ofSatoshis(123)) )); Coins newAmount = Coins.ofSatoshis(1_000); - Coins updateFees = Coins.ofMilliSatoshis(110); + Coins updateFees = Coins.ofMilliSatoshis(200); assertThat(original.getForAmount(newAmount)) .isEqualTo(new Route(original.edges(), newAmount, updateFees, original.liquidityInformation())); } diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java index e6fee642..19482aac 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java @@ -161,9 +161,9 @@ class ChannelControllerIT { .andExpect(jsonPath("$.balance.remoteAvailableSat", is("113"))) .andExpect(jsonPath("$.policies.local.enabled", is(false))) .andExpect(jsonPath("$.policies.remote.enabled", is(true))) - .andExpect(jsonPath("$.policies.local.feeRatePpm", is(100))) - .andExpect(jsonPath("$.policies.local.baseFeeMilliSat", is(10))) - .andExpect(jsonPath("$.policies.remote.feeRatePpm", is(222))) + .andExpect(jsonPath("$.policies.local.feeRatePpm", is(200))) + .andExpect(jsonPath("$.policies.local.baseFeeMilliSat", is(0))) + .andExpect(jsonPath("$.policies.remote.feeRatePpm", is(300))) .andExpect(jsonPath("$.policies.remote.baseFeeMilliSat", is(0))) .andExpect(jsonPath("$.feeReport.earnedMilliSat", is("1234"))) .andExpect(jsonPath("$.feeReport.sourcedMilliSat", is("567"))) @@ -229,9 +229,9 @@ class ChannelControllerIT { when(channelService.getLocalChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL)); when(policyService.getPolicies(LOCAL_OPEN_CHANNEL)).thenReturn(POLICIES_FOR_LOCAL_CHANNEL); mockMvc.perform(get(CHANNEL_PREFIX + "/policies")) - .andExpect(jsonPath("$.local.feeRatePpm", is(100))) - .andExpect(jsonPath("$.local.baseFeeMilliSat", is(10))) - .andExpect(jsonPath("$.remote.feeRatePpm", is(222))) + .andExpect(jsonPath("$.local.feeRatePpm", is(200))) + .andExpect(jsonPath("$.local.baseFeeMilliSat", is(0))) + .andExpect(jsonPath("$.remote.feeRatePpm", is(300))) .andExpect(jsonPath("$.remote.baseFeeMilliSat", is(0))) .andExpect(jsonPath("$.local.enabled", is(false))) .andExpect(jsonPath("$.remote.enabled", is(true))); diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/dto/PolicyDtoTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/dto/PolicyDtoTest.java index 5a63d7db..afe846af 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/dto/PolicyDtoTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/dto/PolicyDtoTest.java @@ -3,13 +3,21 @@ package de.cotto.lndmanagej.controller.dto; import org.junit.jupiter.api.Test; import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_DISABLED; +import static de.cotto.lndmanagej.model.PolicyFixtures.POLICY_WITH_BASE_FEE; import static org.assertj.core.api.Assertions.assertThat; class PolicyDtoTest { @Test - void createFromModel() { - PolicyDto expected = new PolicyDto(100, 10, false); + void createFromModel_disabled() { + PolicyDto expected = new PolicyDto(200, 0, false); PolicyDto dto = PolicyDto.createFromModel(POLICY_DISABLED); assertThat(dto).isEqualTo(expected); } + + @Test + void createFromModel_with_base_fee() { + PolicyDto expected = new PolicyDto(200, 10, true); + PolicyDto dto = PolicyDto.createFromModel(POLICY_WITH_BASE_FEE); + assertThat(dto).isEqualTo(expected); + } }