Skip to main content

A Python package for generating valid and invalid protobuf test data.

Project description

Protobuf Data Generator

PyPI Python Versions Build Status License

Overview

The Protobuf Data Generator creates realistic valid and invalid payloads for Protocol Buffer messages. It reads constraint annotations directly from your .proto files (for example, Protovalidate or Nanopb rules) and deterministically assembles data that either satisfies or intentionally violates those rules. The library is ideal for fuzzing, regression testing, and golden-data generation across embedded and backend protobuf workloads.

Features

  • Deterministic valid payloads generated from constraint metadata.
  • Targeted invalid samples that break explicit rules (e.g., min/max, length, uniqueness).
  • Constraint backends for Protovalidate and Nanopb, with a lightweight parser that understands enums and repeated fields.
  • Formatter outputs for C arrays, raw bytes, JSON, and hexadecimal encodings.
  • Showcase fixtures (tests/fixtures/showcase.proto) illustrating the full feature set end-to-end.

Installation

pip install protobuf-data-generator

For local development:

git clone https://github.com/OfekiAlm/protobuf-data-generator.git
cd protobuf-data-generator
pip install -r requirements-dev.txt

Usage

Python API

from protobuf_test_generator import DataGenerator

generator = DataGenerator(
		"tests/fixtures/showcase.proto",
		include_paths=["tests/fixtures"],
		constraints_type="protovalidate",  # or "nanopb"
)

valid_payload = generator.generate_valid("Showcase", seed=42)
invalid_payload = generator.generate_invalid(
		"Showcase",
		violate_field="email",
		violate_rule="min_len",
		seed=42,
)

binary_blob = generator.encode_to_binary("Showcase", valid_payload)
c_array = generator.format_output(binary_blob, "c_array", "showcase_payload")

Showcase workflow

  • tests/fixtures/showcase.proto – comprehensive proto covering numeric, string, enum, repeated, and nested-field constraints.
  • tests/test_showcase.py – integration test demonstrating parsing, generation, validation, and formatting steps.
  • The helper validate.proto shipped alongside the fixtures is a minimal stub replicating the option names used in the official protovalidate descriptors. It exists solely to exercise constraint parsing in tests.

Command line interface

python -m protobuf_test_generator \
	--proto_file tests/fixtures/showcase.proto \
	--message Showcase \
	--format json

Optional flags:

  • -I / --include path – repeatable include directories for proto imports.
  • --invalid --field FIELD --rule RULE – produce a payload that violates a specific rule.
  • --seed N – lock generation to deterministic output.

Development

black --check src tests
flake8 src tests
mypy src
pytest

See the CHANGELOG for release history.

Contributing

Issues and pull requests are welcome! Please discuss substantial changes in an issue before opening a PR.

License

Distributed under the MIT License. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

protobuf_data_generator-1.0.1.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

protobuf_data_generator-1.0.1-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file protobuf_data_generator-1.0.1.tar.gz.

File metadata

  • Download URL: protobuf_data_generator-1.0.1.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for protobuf_data_generator-1.0.1.tar.gz
Algorithm Hash digest
SHA256 7d9c8ab835990d318b4435e4c02034dae315813ca29dd05cd7086c10cbffeab1
MD5 906e53acb2dc2f43d23092290e1e5ed8
BLAKE2b-256 38e3cdfd57dcc075ed0dba77fa655fee4ace02cd866ec87dc0ff234d7c48eb49

See more details on using hashes here.

File details

Details for the file protobuf_data_generator-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for protobuf_data_generator-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4c9e152b5b4cbb55233f86dceb0673c144e42b680898d76fa32932294be5eab6
MD5 1648f7adf61443b642396cc899d3f7d5
BLAKE2b-256 69eec21e3d40a356fc0521dab206c1b640bb3176ade95e5345b8f14270d34e2a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page