134 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package vault
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"fmt"
 | 
						|
	"github.com/micro/go-micro/config"
 | 
						|
	"os"
 | 
						|
	"reflect"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestVaultMakeMap(t *testing.T) {
 | 
						|
	tt := []struct {
 | 
						|
		name       string
 | 
						|
		expected   []byte
 | 
						|
		input      []byte
 | 
						|
		secretName string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name:       "simple valid data 1",
 | 
						|
			secretName: "my/secret",
 | 
						|
			input:      []byte(`{"data":{"bar":"bazz", "tar":"par"}, "metadata":{"version":1, "destroyed": false}}`),
 | 
						|
			expected:   []byte(`{"my":{"secret":{"bar":"bazz", "tar":"par"}}}`),
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:       "simple valid data 2",
 | 
						|
			secretName: "my/secret",
 | 
						|
			input:      []byte(`{"bar":"bazz", "tar":"par"}`),
 | 
						|
			expected:   []byte(`{"my":{"secret":{"bar":"bazz", "tar":"par"}}}`),
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tc := range tt {
 | 
						|
		t.Run(tc.name, func(t *testing.T) {
 | 
						|
			var input map[string]interface{}
 | 
						|
			var expected map[string]interface{}
 | 
						|
 | 
						|
			_ = json.Unmarshal(tc.input, &input)
 | 
						|
			_ = json.Unmarshal(tc.expected, &expected)
 | 
						|
 | 
						|
			out, _ := makeMap(input, tc.secretName)
 | 
						|
 | 
						|
			if eq := reflect.DeepEqual(out, expected); !eq {
 | 
						|
				fmt.Println(eq)
 | 
						|
				t.Fatalf("expected %v and got %v", expected, out)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestVault_Read(t *testing.T) {
 | 
						|
	if tr := os.Getenv("TRAVIS"); len(tr) > 0 {
 | 
						|
		t.Skip()
 | 
						|
	}
 | 
						|
 | 
						|
	var (
 | 
						|
		address = "http://127.0.0.1"
 | 
						|
		resource = "secret/data/db/auth"
 | 
						|
		token = "s.Q4Zi0CSowXZl7sh0z96ijcT4"
 | 
						|
	)
 | 
						|
 | 
						|
	data := []byte(`{"secret":{"data":{"db":{"auth":{"host":"128.23.33.21","password":"mypassword","port":"3306","user":"myuser"}}}}}`)
 | 
						|
 | 
						|
	tt := []struct {
 | 
						|
		name      string
 | 
						|
		addr     string
 | 
						|
		resource string
 | 
						|
		token string
 | 
						|
	}{
 | 
						|
		{name: "read data basic", addr: address, resource: resource, token: token},
 | 
						|
		{name: "read data without token", addr: address, resource: resource, token: ""},
 | 
						|
		{name: "read data full address format", addr: "http://127.0.0.1:8200", resource: resource, token: token},
 | 
						|
		{name: "read data wrong resource path", addr: address, resource: "secrets/data/db/auth", token: token},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tc := range tt {
 | 
						|
		t.Run(tc.name, func(t *testing.T) {
 | 
						|
			source := NewSource(
 | 
						|
				WithAddress(tc.addr),
 | 
						|
				WithResourcePath(tc.resource),
 | 
						|
				WithToken(tc.token),
 | 
						|
			)
 | 
						|
 | 
						|
			r, err := source.Read()
 | 
						|
			if err != nil {
 | 
						|
				if tc.token == "" {
 | 
						|
					return
 | 
						|
				} else if strings.Compare(err.Error(), "source not found: secrets/data/db/auth") == 0 {
 | 
						|
					return
 | 
						|
				}
 | 
						|
				t.Errorf("%s: not able to read the config values because: %v", tc.name, err)
 | 
						|
				return
 | 
						|
			}
 | 
						|
 | 
						|
			if string(r.Data) != string(data) {
 | 
						|
				t.Logf("data expected: %v", string(data))
 | 
						|
				t.Logf("data got from configmap: %v", string(r.Data))
 | 
						|
				t.Errorf("data from configmap does not match.")
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestVault_String(t *testing.T) {
 | 
						|
	source := NewSource()
 | 
						|
 | 
						|
	if source.String() != "vault" {
 | 
						|
		t.Errorf("expecting to get %v and instead got %v", "vault", source)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestVaultNewSource(t *testing.T) {
 | 
						|
	if tr := os.Getenv("TRAVIS"); len(tr) > 0 {
 | 
						|
		t.Skip()
 | 
						|
	}
 | 
						|
 | 
						|
	conf := config.NewConfig()
 | 
						|
 | 
						|
	_ = conf.Load(NewSource(
 | 
						|
		WithAddress("http://127.0.0.1"),
 | 
						|
		WithResourcePath("secret/data/db/auth"),
 | 
						|
		WithToken("s.Q4Zi0CSowXZl7sh0z96ijcT4"),
 | 
						|
	))
 | 
						|
 | 
						|
	if user := conf.Get("secret", "data", "db", "auth", "user").String("user"); user != "myuser" {
 | 
						|
		t.Errorf("expected %v and got %v", "myuser", user)
 | 
						|
	}
 | 
						|
 | 
						|
	if addr := conf.Get("secret", "data", "db", "auth", "host").String("host"); addr != "128.23.33.21" {
 | 
						|
		t.Errorf("expected %v and got %v", "128.23.33.21", addr)
 | 
						|
	}
 | 
						|
}
 |