Implement sop version --sop-spec

This commit is contained in:
Paul Schaub 2023-04-14 14:41:37 +02:00
parent dfce1ad6bb
commit f49c16e4c5
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
4 changed files with 45 additions and 0 deletions

View File

@ -99,4 +99,23 @@ public class VersionExternal implements Version {
throw new RuntimeException(e);
}
}
@Override
public String getSopSpecVersion() {
String[] command = new String[] {binary, "version", "--sop-spec"};
String[] env = ExternalSOP.propertiesToEnv(environment).toArray(new String[0]);
try {
Process process = runtime.exec(command, env);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = stdInput.readLine()) != null) {
sb.append(line).append('\n');
}
ExternalSOP.finish(process);
return sb.toString();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -22,6 +22,9 @@ public class VersionCmd extends AbstractSopCmd {
@CommandLine.Option(names = "--backend")
boolean backend;
@CommandLine.Option(names = "--sop-spec")
boolean sopSpec;
}
@ -45,5 +48,10 @@ public class VersionCmd extends AbstractSopCmd {
Print.outln(version.getBackendVersion());
return;
}
if (exclusive.sopSpec) {
Print.outln(version.getSopSpecVersion());
return;
}
}
}

View File

@ -46,4 +46,14 @@ public interface Version {
* @return extended version string
*/
String getExtendedVersion();
/**
* Return the revision of the SOP specification that this implementation is implementing, for example,
* <pre>draft-dkg-openpgp-stateless-cli-06</pre>.
* If the implementation targets a specific draft but the implementer knows the implementation is incomplete,
* it should prefix the draft title with a "~" (TILDE, U+007E), for example: <pre>~draft-dkg-openpgp-stateless-cli-06</pre>.
*
* @return implemented SOP spec version
*/
String getSopSpecVersion();
}

View File

@ -14,6 +14,7 @@ import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@EnabledIf("sop.testsuite.operation.AbstractSOPTest#hasBackends")
public class VersionTest extends AbstractSOPTest {
@ -51,4 +52,11 @@ public class VersionTest extends AbstractSOPTest {
assertFalse(extended.isEmpty());
}
@ParameterizedTest
@MethodSource("provideInstances")
public void sopSpecVersionTest(SOP sop) {
String sopSpec = sop.version().getSopSpecVersion();
assertTrue(sopSpec.startsWith("draft-dkg-openpgp-stateless-cli-") ||
sopSpec.startsWith("~draft-dkg-openpgp-stateless-cli-"));
}
}