Skip to content

Commit 228cafc

Browse files
committed
Add HandshakePattern#toString (mostly for fun)
1 parent e89fc10 commit 228cafc

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

src/main/java/com/eatthepath/noise/HandshakePattern.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,18 @@ class HandshakePattern {
340340
}
341341

342342
record MessagePattern(NoiseHandshake.Role sender, Token[] tokens) {
343+
@Override
344+
public String toString() {
345+
final String prefix = switch (sender()) {
346+
case INITIATOR -> " -> ";
347+
case RESPONDER -> " <- ";
348+
};
349+
350+
return prefix + Arrays.stream(tokens())
351+
.map(token -> token.name().toLowerCase())
352+
.collect(Collectors.joining(", "));
353+
}
354+
343355
@Override
344356
public boolean equals(final Object o) {
345357
if (this == o) return true;
@@ -691,6 +703,31 @@ boolean requiresRemoteStaticPublicKey(final NoiseHandshake.Role role) {
691703
.anyMatch(token -> token == Token.S);
692704
}
693705

706+
@Override
707+
public String toString() {
708+
final StringBuilder stringBuilder = new StringBuilder(getName() + ":\n");
709+
710+
// We know we can't end on a pre-message pattern line, so we can unconditionally append newlines after each
711+
// pre-handshake message
712+
Arrays.stream(getPreMessagePatterns())
713+
.forEach(preMessagePattern -> {
714+
stringBuilder.append(preMessagePattern);
715+
stringBuilder.append('\n');
716+
});
717+
718+
if (getPreMessagePatterns().length > 0) {
719+
stringBuilder.append(" ");
720+
stringBuilder.append(PRE_MESSAGE_SEPARATOR);
721+
stringBuilder.append('\n');
722+
}
723+
724+
stringBuilder.append(Arrays.stream(getHandshakeMessagePatterns())
725+
.map(MessagePattern::toString)
726+
.collect(Collectors.joining("\n")));
727+
728+
return stringBuilder.toString();
729+
}
730+
694731
/**
695732
* Tests whether this handshake pattern is equal to another object. This handshake pattern is equal to the given
696733
* object if the given object is also a handshake pattern and has the same name and message patterns as this handshake

src/test/java/com/eatthepath/noise/HandshakePatternTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,23 @@ void fromString() {
8888
}
8989
}
9090

91+
@Test
92+
void testToString() throws NoSuchPatternException {
93+
assertEquals("""
94+
XX:
95+
-> e
96+
<- e, ee, s, es
97+
-> s, se""", HandshakePattern.getInstance("XX").toString());
98+
99+
assertEquals("""
100+
KK:
101+
-> s
102+
<- s
103+
...
104+
-> e, es, ss
105+
<- e, ee, se""", HandshakePattern.getInstance("KK").toString());
106+
}
107+
91108
@ParameterizedTest
92109
@CsvSource({
93110
"XX,XX",

0 commit comments

Comments
 (0)