aboutsummaryrefslogtreecommitdiff
path: root/pw_rpc/py/codegen_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'pw_rpc/py/codegen_test.py')
-rw-r--r--pw_rpc/py/codegen_test.py181
1 files changed, 0 insertions, 181 deletions
diff --git a/pw_rpc/py/codegen_test.py b/pw_rpc/py/codegen_test.py
deleted file mode 100644
index ee96a8c72..000000000
--- a/pw_rpc/py/codegen_test.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2020 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.
-"""Tests the generated pw_rpc code."""
-
-from pathlib import Path
-import os
-import subprocess
-import tempfile
-import unittest
-
-TEST_PROTO_FILE = b"""\
-syntax = "proto3";
-
-package pw.rpc.test;
-
-message TestRequest {
- float integer = 1;
-}
-
-message TestResponse {
- int32 value = 1;
-}
-
-message TestStreamResponse {
- bytes chunk = 1;
-}
-
-message Empty {}
-
-service TestService {
- rpc TestRpc(TestRequest) returns (TestResponse) {}
- rpc TestStreamRpc(Empty) returns (stream TestStreamResponse) {}
-}
-"""
-
-EXPECTED_NANOPB_CODE = """\
-#pragma once
-
-#include <array>
-#include <cstddef>
-#include <cstdint>
-#include <type_traits>
-
-#include "pw_rpc/internal/method.h"
-#include "pw_rpc/server_context.h"
-#include "pw_rpc/service.h"
-#include "test.pb.h"
-
-namespace pw::rpc::internal {
-
-template <auto>
-class ServiceMethodTraits;
-
-} // namespace pw::rpc::internal
-
-namespace pw::rpc::test {
-namespace generated {
-
-template <typename Implementation>
-class TestService : public ::pw::rpc::Service {
- public:
- using ServerContext = ::pw::rpc::ServerContext;
- template <typename T>
- using ServerWriter = ::pw::rpc::ServerWriter<T>;
-
- constexpr TestService()
- : ::pw::rpc::Service(kServiceId, kMethods) {}
-
- TestService(const TestService&) = delete;
- TestService& operator=(const TestService&) = delete;
-
- static constexpr const char* name() { return "TestService"; }
-
- // Used by ServiceMethodTraits to identify a base service.
- constexpr void _PwRpcInternalGeneratedBase() const {}
-
- private:
- // Hash of "pw.rpc.test.TestService".
- static constexpr uint32_t kServiceId = 0xcc0f6de0;
-
- static ::pw::Status Invoke_TestRpc(
- ::pw::rpc::internal::ServerCall& call,
- const pw_rpc_test_TestRequest& request,
- pw_rpc_test_TestResponse& response) {
- return static_cast<Implementation&>(call.service())
- .TestRpc(call.context(), request, response);
- }
-
- static void Invoke_TestStreamRpc(
- ::pw::rpc::internal::ServerCall& call,
- const pw_rpc_test_TestRequest& request,
- ServerWriter<pw_rpc_test_TestStreamResponse>& writer) {
- static_cast<Implementation&>(call.service())
- .TestStreamRpc(call.context(), request, writer);
- }
-
- static constexpr std::array<::pw::rpc::internal::Method, 2> kMethods = {
- ::pw::rpc::internal::Method::Unary<Invoke_TestRpc>(
- 0xbc924054, // Hash of "TestRpc"
- pw_rpc_test_TestRequest_fields,
- pw_rpc_test_TestResponse_fields),
- ::pw::rpc::internal::Method::ServerStreaming<Invoke_TestStreamRpc>(
- 0xd97a28fa, // Hash of "TestStreamRpc"
- pw_rpc_test_TestRequest_fields,
- pw_rpc_test_TestStreamResponse_fields),
- };
-
- template <auto impl_method>
- static constexpr const ::pw::rpc::internal::Method* MethodFor() {
- if constexpr (std::is_same_v<decltype(impl_method), decltype(&Implementation::TestRpc)>) {
- if constexpr (impl_method == &Implementation::TestRpc) {
- return &std::get<0>(kMethods);
- }
- }
- if constexpr (std::is_same_v<decltype(impl_method), decltype(&Implementation::TestStreamRpc)>) {
- if constexpr (impl_method == &Implementation::TestStreamRpc) {
- return &std::get<1>(kMethods);
- }
- }
- return nullptr;
- }
-
- template <auto>
- friend class ::pw::rpc::internal::ServiceMethodTraits;
-};
-
-} // namespace generated
-} // namespace pw::rpc::test
-"""
-
-
-class TestNanopbCodegen(unittest.TestCase):
- """Test case for nanopb code generation."""
- def setUp(self):
- self._output_dir = tempfile.TemporaryDirectory()
-
- def tearDown(self):
- self._output_dir.cleanup()
-
- def test_nanopb_codegen(self):
- root = Path(os.getenv('PW_ROOT'))
- proto_dir = root / 'pw_rpc' / 'pw_rpc_test_protos'
- proto_file = proto_dir / 'test.proto'
-
- venv_bin = 'Scripts' if os.name == 'nt' else 'bin'
- plugin = root / '.python3-env' / venv_bin / 'pw_rpc_codegen'
-
- command = (
- 'protoc',
- f'-I{proto_dir}',
- proto_file,
- '--plugin',
- f'protoc-gen-custom={plugin}',
- '--custom_out',
- self._output_dir.name,
- )
-
- subprocess.run(command)
-
- generated_files = os.listdir(self._output_dir.name)
- self.assertEqual(len(generated_files), 1)
- self.assertEqual(generated_files[0], 'test.rpc.pb.h')
-
- # Read the generated file, ignoring its preamble.
- generated_code = Path(self._output_dir.name,
- generated_files[0]).read_text()
- generated_code = generated_code[generated_code.index('#pragma'):]
-
- self.assertEqual(generated_code, EXPECTED_NANOPB_CODE)