| #!/usr/bin/env python3 |
| # Copyright 2022 The Pigweed Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| # use this file except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| """Cross-language pw_transfer tests that do several transfers per session. |
| |
| Usage: |
| |
| bazel run pw_transfer/integration_test:multi_transfer_test |
| |
| Command-line arguments must be provided after a double-dash: |
| |
| bazel run pw_transfer/integration_test:multi_transfer_test -- \ |
| --server-port 3304 |
| |
| Which tests to run can be specified as command-line arguments: |
| |
| bazel run pw_transfer/integration_test:multi_transfer_test -- \ |
| MultiTransferIntegrationTest.test_write_to_same_id_1_java |
| |
| """ |
| |
| from parameterized import parameterized |
| import random |
| |
| from pigweed.pw_transfer.integration_test import test_fixture |
| from test_fixture import TransferIntegrationTestHarness, BasicTransfer |
| from pigweed.pw_transfer.integration_test import config_pb2 |
| |
| |
| class MultiTransferIntegrationTest(test_fixture.TransferIntegrationTest): |
| # Each set of transfer tests uses a different client/server port pair to |
| # allow tests to be run in parallel. |
| HARNESS_CONFIG = TransferIntegrationTestHarness.Config( |
| server_port=3308, client_port=3309 |
| ) |
| |
| @parameterized.expand( |
| [ |
| ("cpp"), |
| ("java"), |
| ("python"), |
| ] |
| ) |
| def test_write_to_same_id(self, client_type): |
| rng = random.Random(1533659510898) |
| config = self.default_config() |
| resource_id = 5 |
| transfers: list[BasicTransfer] = [] |
| for i in range(1, 6): |
| transfers.append( |
| BasicTransfer( |
| id=resource_id, |
| type=config_pb2.TransferAction.TransferType.WRITE_TO_SERVER, |
| data=rng.randbytes(rng.randrange(213, 1111)), |
| ) |
| ) |
| |
| self.do_basic_transfer_sequence(client_type, config, transfers) |
| |
| @parameterized.expand( |
| [ |
| ("cpp"), |
| ("java"), |
| ("python"), |
| ] |
| ) |
| def test_read_from_same_id(self, client_type): |
| rng = random.Random(1533659510898) |
| config = self.default_config() |
| resource_id = 5 |
| transfers: list[BasicTransfer] = [] |
| for i in range(1, 6): |
| transfers.append( |
| BasicTransfer( |
| id=resource_id, |
| type=config_pb2.TransferAction.TransferType.READ_FROM_SERVER, |
| data=rng.randbytes(rng.randrange(213, 1111)), |
| ) |
| ) |
| |
| self.do_basic_transfer_sequence(client_type, config, transfers) |
| |
| @parameterized.expand( |
| [ |
| ("cpp"), |
| ("java"), |
| ("python"), |
| ] |
| ) |
| def test_read_write_with_same_id(self, client_type): |
| rng = random.Random(1533659510898) |
| config = self.default_config() |
| resource_id = 53333333 |
| transfers: list[BasicTransfer] = [] |
| for i in range(1, 6): |
| transfer_type = ( |
| config_pb2.TransferAction.TransferType.READ_FROM_SERVER |
| if i % 2 == 0 |
| else config_pb2.TransferAction.TransferType.WRITE_TO_SERVER |
| ) |
| transfers.append( |
| BasicTransfer( |
| id=resource_id, |
| type=config_pb2.TransferAction.TransferType.READ_FROM_SERVER, |
| data=rng.randbytes(rng.randrange(213, 1111)), |
| ) |
| ) |
| |
| self.do_basic_transfer_sequence(client_type, config, transfers) |
| |
| |
| if __name__ == '__main__': |
| test_fixture.run_tests_for(MultiTransferIntegrationTest) |