98 lines
2.7 KiB
Go
98 lines
2.7 KiB
Go
|
package pogs
|
||
|
|
||
|
import (
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/cloudflare/cloudflared/tunnelrpc"
|
||
|
"github.com/google/uuid"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
capnp "zombiezen.com/go/capnproto2"
|
||
|
)
|
||
|
|
||
|
// Assert *SystemName implements Scope
|
||
|
var _ Scope = (*SystemName)(nil)
|
||
|
|
||
|
// Assert *Group implements Scope
|
||
|
var _ Scope = (*Group)(nil)
|
||
|
|
||
|
func TestScope(t *testing.T) {
|
||
|
testCases := []Scope{
|
||
|
&SystemName{systemName: "my_system"},
|
||
|
&Group{group: "my_group"},
|
||
|
}
|
||
|
for i, testCase := range testCases {
|
||
|
_, seg, err := capnp.NewMessage(capnp.SingleSegment(nil))
|
||
|
capnpEntity, err := tunnelrpc.NewScope(seg)
|
||
|
if !assert.NoError(t, err) {
|
||
|
t.Fatal("Couldn't initialize a new message")
|
||
|
}
|
||
|
err = MarshalScope(capnpEntity, testCase)
|
||
|
if !assert.NoError(t, err, "testCase index %v failed to marshal", i) {
|
||
|
continue
|
||
|
}
|
||
|
result, err := UnmarshalScope(capnpEntity)
|
||
|
if !assert.NoError(t, err, "testCase index %v failed to unmarshal", i) {
|
||
|
continue
|
||
|
}
|
||
|
assert.Equal(t, testCase, result, "testCase index %v didn't preserve struct through marshalling and unmarshalling", i)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestConnectParameters(t *testing.T) {
|
||
|
testCases := []*ConnectParameters{
|
||
|
sampleConnectParameters(),
|
||
|
sampleConnectParameters(func(c *ConnectParameters) {
|
||
|
c.Scope = &SystemName{systemName: "my_system"}
|
||
|
}),
|
||
|
sampleConnectParameters(func(c *ConnectParameters) {
|
||
|
c.Tags = nil
|
||
|
}),
|
||
|
}
|
||
|
for i, testCase := range testCases {
|
||
|
_, seg, err := capnp.NewMessage(capnp.SingleSegment(nil))
|
||
|
capnpEntity, err := tunnelrpc.NewCapnpConnectParameters(seg)
|
||
|
if !assert.NoError(t, err) {
|
||
|
t.Fatal("Couldn't initialize a new message")
|
||
|
}
|
||
|
err = MarshalConnectParameters(capnpEntity, testCase)
|
||
|
if !assert.NoError(t, err, "testCase index %v failed to marshal", i) {
|
||
|
continue
|
||
|
}
|
||
|
result, err := UnmarshalConnectParameters(capnpEntity)
|
||
|
if !assert.NoError(t, err, "testCase index %v failed to unmarshal", i) {
|
||
|
continue
|
||
|
}
|
||
|
assert.Equal(t, testCase, result, "testCase index %v didn't preserve struct through marshalling and unmarshalling", i)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func sampleConnectParameters(overrides ...func(*ConnectParameters)) *ConnectParameters {
|
||
|
cloudflaredID, err := uuid.Parse("ED7BA470-8E54-465E-825C-99712043E01C")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
sample := &ConnectParameters{
|
||
|
OriginCert: []byte("my-origin-cert"),
|
||
|
CloudflaredID: cloudflaredID,
|
||
|
NumPreviousAttempts: 19,
|
||
|
Tags: []Tag{
|
||
|
Tag{
|
||
|
Name: "provision-method",
|
||
|
Value: "new",
|
||
|
},
|
||
|
},
|
||
|
CloudflaredVersion: "7.0",
|
||
|
Scope: &Group{group: "my_group"},
|
||
|
}
|
||
|
sample.ensureNoZeroFields()
|
||
|
for _, f := range overrides {
|
||
|
f(sample)
|
||
|
}
|
||
|
return sample
|
||
|
}
|
||
|
|
||
|
func (c *ConnectParameters) ensureNoZeroFields() {
|
||
|
ensureNoZeroFieldsInSample(reflect.ValueOf(c), []string{})
|
||
|
}
|