Skip to content

[BUG] Conformance tests do not run on Windows #75

@ghost

Description

Description

The conformance test runner does not work on Windows due to an apparent linkage issue with the protobuf well-known types, leading to a large amount of runtime errors.

Steps to Reproduce

  1. Build protovalidate-cc with CMake on Windows using: cmake -B .build -S . -DBUILD_TESTING=ON -DPROTOVALIDATE_CC_ENABLE_TESTS=ON -DPROTOVALIDATE_CC_ENABLE_VENDORING=ON -DPROTOVALIDATE_CC_ENABLE_INSTALL=OFF -GNinja and cmake --build .build
  2. Manually run the conformance runner with: go run github.com/bufbuild/protovalidate/tools/protovalidate-conformance@v0.10.3 .\protovalidate-cc-build-2\protovalidate_cc_conformance_runner_main.exe

Expected Behavior

The conformance runner should at least run properly, even if not all tests currently pass.

Actual Behavior

The conformance runner will fail to even execute and output a large amount of runtime errors.

Screenshots/Logs

WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
E0000 00:00:1742836766.312034    9948 descriptor.cc:4828] Invalid proto descriptor for file "google/protobuf/descriptor.proto":
E0000 00:00:1742836766.312760    9948 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.enum_type: "google.protobuf.EnumDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.312837    9948 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.service: "google.protobuf.ServiceDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.312912    9948 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.extension: "google.protobuf.FieldDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.312976    9948 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.options: "google.protobuf.FileOptions" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313044    9948 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.source_code_info: "google.protobuf.SourceCodeInfo" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313132    9948 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.edition: "google.protobuf.Edition" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313186    9948 descriptor.cc:4831]   google.protobuf.DescriptorProto.field: "google.protobuf.FieldDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313219    9948 descriptor.cc:4831]   google.protobuf.DescriptorProto.extension: "google.protobuf.FieldDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313268    9948 descriptor.cc:4831]   google.protobuf.DescriptorProto.enum_type: "google.protobuf.EnumDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313301    9948 descriptor.cc:4831]   google.protobuf.DescriptorProto.extension_range: "google.protobuf.DescriptorProto.ExtensionRange" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313401    9948 descriptor.cc:4831]   google.protobuf.DescriptorProto.oneof_decl: "google.protobuf.OneofDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313456    9948 descriptor.cc:4831]   google.protobuf.DescriptorProto.options: "google.protobuf.MessageOptions" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.313504    9948 descriptor.cc:4831]   google.protobuf.DescriptorProto.reserved_range: "google.protobuf.DescriptorProto.ReservedRange" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
E0000 00:00:1742836766.435484    1228 descriptor.cc:4828] Invalid proto descriptor for file "google/protobuf/descriptor.proto":
E0000 00:00:1742836766.436009    1228 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.enum_type: "google.protobuf.EnumDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436116    1228 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.service: "google.protobuf.ServiceDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436192    1228 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.extension: "google.protobuf.FieldDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436254    1228 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.options: "google.protobuf.FileOptions" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436343    1228 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.source_code_info: "google.protobuf.SourceCodeInfo" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436444    1228 descriptor.cc:4831]   google.protobuf.FileDescriptorProto.edition: "google.protobuf.Edition" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436500    1228 descriptor.cc:4831]   google.protobuf.DescriptorProto.field: "google.protobuf.FieldDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436542    1228 descriptor.cc:4831]   google.protobuf.DescriptorProto.extension: "google.protobuf.FieldDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436596    1228 descriptor.cc:4831]   google.protobuf.DescriptorProto.enum_type: "google.protobuf.EnumDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436635    1228 descriptor.cc:4831]   google.protobuf.DescriptorProto.extension_range: "google.protobuf.DescriptorProto.ExtensionRange" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436679    1228 descriptor.cc:4831]   google.protobuf.DescriptorProto.oneof_decl: "google.protobuf.OneofDescriptorProto" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436713    1228 descriptor.cc:4831]   google.protobuf.DescriptorProto.options: "google.protobuf.MessageOptions" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
E0000 00:00:1742836766.436748    1228 descriptor.cc:4831]   google.protobuf.DescriptorProto.reserved_range: "google.protobuf.DescriptorProto.ReservedRange" seems to be defined in "google/protobuf/descriptor.proto", which is not imported by "google/protobuf/descriptor.proto".  To use it here, please add the necessary import.
...

Environment

  • Operating System: Windows
  • Version: Windows 11
  • Compiler/Toolchain: Visual Studio 2022
  • Protobuf Compiler & Version: N/A
  • Protoc-gen-validate Version: N/A
  • Protovalidate Version: 4e4a355

Possible Solution

We will need to debug the issue and determine what is causing the mismatched descriptors in the descriptor pool. I believe it is likely an issue with linkage.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions