Files
protodump/pkg/protodump/proto_test.go
T
2026-06-12 16:35:36 -07:00

66 lines
1.5 KiB
Go

package protodump
import (
"fmt"
"os"
"os/exec"
"path"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/descriptorpb"
)
const FIXTURES = "fixtures"
func convertProtoToFileDescriptor(filePath string) (*descriptorpb.FileDescriptorProto, error) {
dir, err := os.MkdirTemp("", "")
if err != nil {
return nil, err
}
defer os.RemoveAll(dir)
filename := "proto.bin"
cmd := exec.Command("protoc", fmt.Sprintf("--go_out=%s", dir), fmt.Sprintf("--descriptor_set_out=%s", path.Join(dir, filename)), filePath)
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Print(string(output))
return nil, err
}
data, err := os.ReadFile(path.Join(dir, filename))
if err != nil {
return nil, err
}
var descriptor descriptorpb.FileDescriptorSet
err = proto.Unmarshal(data, &descriptor)
if err != nil {
return nil, err
}
return descriptor.GetFile()[0], nil
}
func TestDefinitions(t *testing.T) {
files, err := os.ReadDir(FIXTURES)
require.NoError(t, err)
for _, file := range files {
t.Run(file.Name(), func(t *testing.T) {
filePath := path.Join(FIXTURES, file.Name())
descriptor, err := convertProtoToFileDescriptor(filePath)
require.NoError(t, err)
expected, err := os.ReadFile(filePath)
require.NoError(t, err)
actual, err := NewFromDescriptor(descriptor)
require.NoError(t, err)
assert.Equal(t, string(expected), actual.String())
})
}
}