diff --git a/clients/java/zb-mom-ww-mxgateway-cli/src/test/java/com/zb/mom/ww/mxgateway/cli/MxGatewayCliTests.java b/clients/java/zb-mom-ww-mxgateway-cli/src/test/java/com/zb/mom/ww/mxgateway/cli/MxGatewayCliTests.java index 1d0222d..6db3f59 100644 --- a/clients/java/zb-mom-ww-mxgateway-cli/src/test/java/com/zb/mom/ww/mxgateway/cli/MxGatewayCliTests.java +++ b/clients/java/zb-mom-ww-mxgateway-cli/src/test/java/com/zb/mom/ww/mxgateway/cli/MxGatewayCliTests.java @@ -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 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 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 lastReadBulkItems; + private List lastWriteBulkEntries; + private List lastWrite2BulkEntries; @Override public MxCommandReply pingRaw(String message) { @@ -912,6 +992,8 @@ final class MxGatewayCliTests { @Override public List readBulk(int serverHandle, List items, Duration timeout) { + lastReadBulkTimeoutMs = timeout.toMillis(); + lastReadBulkItems = new ArrayList<>(items); List 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 writeBulk(int serverHandle, List entries) { + lastWriteBulkEntries = new ArrayList<>(entries); List results = new ArrayList<>(); for (WriteBulkEntry entry : entries) { results.add(BulkWriteResult.newBuilder() @@ -940,6 +1023,7 @@ final class MxGatewayCliTests { @Override public List write2Bulk(int serverHandle, List entries) { + lastWrite2BulkEntries = new ArrayList<>(entries); List results = new ArrayList<>(); for (Write2BulkEntry entry : entries) { results.add(BulkWriteResult.newBuilder()