This commit is contained in:
2021-06-01 20:15:36 +02:00
commit af3ad67081
11 changed files with 1692 additions and 0 deletions

44
tests/gen/gen.go Normal file
View File

@ -0,0 +1,44 @@
package gen
import (
"os"
"github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protodesc"
"google.golang.org/protobuf/types/known/anypb"
test "go.linka.cloud/protofilters/tests/pb"
)
func Gen() {
t := &test.Test{StringField: "whatever..."}
tf, err := os.Create("test.bin")
if err != nil {
logrus.Fatal(err)
}
defer tf.Close()
a, err := anypb.New(t)
if err != nil {
logrus.Fatal(err)
}
b, err := proto.Marshal(a)
if err != nil {
logrus.Fatal(err)
}
if _, err := tf.Write(b); err != nil {
logrus.Fatal(err)
}
tdf, err := os.Create("test.file-descriptor.bin")
if err != nil {
logrus.Fatal(err)
}
defer tdf.Close()
b, err = proto.Marshal(protodesc.ToFileDescriptorProto(t.ProtoReflect().Descriptor().ParentFile()))
if err != nil {
logrus.Fatal(err)
}
if _, err := tdf.Write(b); err != nil {
logrus.Fatal(err)
}
}

60
tests/main.go Normal file
View File

@ -0,0 +1,60 @@
package main
import (
"io/ioutil"
"github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protodesc"
"google.golang.org/protobuf/reflect/protoregistry"
"google.golang.org/protobuf/types/descriptorpb"
"google.golang.org/protobuf/types/dynamicpb"
"google.golang.org/protobuf/types/known/anypb"
ff "go.linka.cloud/protofilters"
"go.linka.cloud/protofilters/matcher"
)
func main() {
// gen.Gen()
b, err := ioutil.ReadFile("test.file-descriptor.bin")
if err != nil {
logrus.Fatal(err)
}
var fdp descriptorpb.FileDescriptorProto
if err := proto.Unmarshal(b, &fdp); err != nil {
logrus.Fatal(err)
}
fd, err := protodesc.NewFile(&fdp, protoregistry.GlobalFiles)
if err != nil {
logrus.Fatal(err)
}
// protodesc.NewFile(d.)
d := dynamicpb.NewMessage(fd.Messages().Get(0))
b, err = ioutil.ReadFile("test.bin")
if err != nil {
logrus.Fatal(err)
}
a := anypb.Any{}
if err := proto.Unmarshal(b, &a); err != nil {
logrus.Fatal(err)
}
if err := anypb.UnmarshalTo(&a, d, proto.UnmarshalOptions{}); err != nil {
logrus.Fatal(err)
}
logrus.Infof("%+v", d)
logrus.Info(d.ProtoReflect().Descriptor().FullName())
filter := &ff.FieldFilter{
Field: "string_field",
// Filter: ff.StringRegex(".*....*"),
Filter: ff.StringIN("", "whatever..."),
}
ok, err := matcher.MatchFilters(d, filter)
if err != nil {
logrus.Fatal(err)
}
if !ok {
logrus.Fatal("reg ex not found")
}
logrus.Infof("%v match %v", d, filter)
}