test(java-cli): cover read-bulk/write-bulk/write2-bulk round trips

This commit is contained in:
Joseph Doherty
2026-06-16 16:33:42 -04:00
parent 76ffd5c9a3
commit 1cfad83c06
@@ -305,6 +305,82 @@ final class MxGatewayCliTests {
assertTrue(run.output().contains("\"tagAddress\":\"TestMachine_002.TestChangingInt\""));
}
// ---- read-bulk / write-bulk / write2-bulk subcommands ----
@Test
void readBulkCommandForwardsTimeoutAndPrintsResults() {
FakeClientFactory factory = new FakeClientFactory();
CliRun run = execute(
factory,
"read-bulk",
"--session-id", "session-cli",
"--server-handle", "42",
"--items", "TestMachine_001.TestInt,TestMachine_002.TestInt",
"--timeout-ms", "750",
"--json");
assertEquals(0, run.exitCode());
assertEquals(750, factory.client.session.lastReadBulkTimeoutMs);
String out = run.output();
assertTrue(out.contains("\"command\":\"read-bulk\""), out);
assertTrue(out.contains("\"tagAddress\":\"TestMachine_001.TestInt\""), out);
assertTrue(out.contains("\"tagAddress\":\"TestMachine_002.TestInt\""), out);
assertTrue(out.contains("\"itemHandle\""), out);
assertTrue(out.contains("\"wasCached\""), out);
assertTrue(out.contains("\"quality\""), out);
}
@Test
void writeBulkCommandParsesTypedValuesAndPrintsResults() {
FakeClientFactory factory = new FakeClientFactory();
CliRun run = execute(
factory,
"write-bulk",
"--session-id", "session-cli",
"--server-handle", "42",
"--item-handles", "100,101",
"--type", "int32",
"--values", "111,222",
"--user-id", "5",
"--json");
assertEquals(0, run.exitCode());
List<WriteBulkEntry> entries = factory.client.session.lastWriteBulkEntries;
assertEquals(2, entries.size());
assertEquals(111, entries.get(0).getValue().getInt32Value());
assertEquals(222, entries.get(1).getValue().getInt32Value());
assertEquals(5, entries.get(0).getUserId());
assertEquals(5, entries.get(1).getUserId());
String out = run.output();
assertTrue(out.contains("\"command\":\"write-bulk\""), out);
assertTrue(out.contains("\"itemHandle\":100"), out);
assertTrue(out.contains("\"wasSuccessful\":true"), out);
}
@Test
void write2BulkCommandForwardsTimestampAndPrintsResults() {
FakeClientFactory factory = new FakeClientFactory();
CliRun run = execute(
factory,
"write2-bulk",
"--session-id", "session-cli",
"--server-handle", "42",
"--item-handles", "100",
"--type", "string",
"--values", "hello",
"--timestamp", "2026-05-20T00:00:00Z",
"--json");
assertEquals(0, run.exitCode());
List<Write2BulkEntry> entries = factory.client.session.lastWrite2BulkEntries;
assertEquals(1, entries.size());
assertTrue(entries.get(0).hasTimestampValue(), "expected timestampValue to be set");
String out = run.output();
assertTrue(out.contains("\"command\":\"write2-bulk\""), out);
assertTrue(out.contains("\"itemHandle\":100"), out);
assertTrue(out.contains("\"wasSuccessful\":true"), out);
}
@Test
void unsubscribeBulkCommandPrintsResults() {
CliRun run = execute(
@@ -815,6 +891,10 @@ final class MxGatewayCliTests {
private boolean adviseCalled;
private MxValue lastWriteValue;
private String lastPingMessage;
private long lastReadBulkTimeoutMs;
private List<String> lastReadBulkItems;
private List<WriteBulkEntry> lastWriteBulkEntries;
private List<Write2BulkEntry> lastWrite2BulkEntries;
@Override
public MxCommandReply pingRaw(String message) {
@@ -912,6 +992,8 @@ final class MxGatewayCliTests {
@Override
public List<BulkReadResult> readBulk(int serverHandle, List<String> items, Duration timeout) {
lastReadBulkTimeoutMs = timeout.toMillis();
lastReadBulkItems = new ArrayList<>(items);
List<BulkReadResult> results = new ArrayList<>();
for (int index = 0; index < items.size(); index++) {
results.add(BulkReadResult.newBuilder()
@@ -927,6 +1009,7 @@ final class MxGatewayCliTests {
@Override
public List<BulkWriteResult> writeBulk(int serverHandle, List<WriteBulkEntry> entries) {
lastWriteBulkEntries = new ArrayList<>(entries);
List<BulkWriteResult> results = new ArrayList<>();
for (WriteBulkEntry entry : entries) {
results.add(BulkWriteResult.newBuilder()
@@ -940,6 +1023,7 @@ final class MxGatewayCliTests {
@Override
public List<BulkWriteResult> write2Bulk(int serverHandle, List<Write2BulkEntry> entries) {
lastWrite2BulkEntries = new ArrayList<>(entries);
List<BulkWriteResult> results = new ArrayList<>();
for (Write2BulkEntry entry : entries) {
results.add(BulkWriteResult.newBuilder()