mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-11-04 04:28:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			212 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package command
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"io/ioutil"
 | 
						|
	"os"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
func TestParseArgsData(t *testing.T) {
 | 
						|
	t.Parallel()
 | 
						|
 | 
						|
	t.Run("stdin_full", func(t *testing.T) {
 | 
						|
		t.Parallel()
 | 
						|
 | 
						|
		stdinR, stdinW := io.Pipe()
 | 
						|
		go func() {
 | 
						|
			stdinW.Write([]byte(`{"foo":"bar"}`))
 | 
						|
			stdinW.Close()
 | 
						|
		}()
 | 
						|
 | 
						|
		m, err := parseArgsData(stdinR, []string{"-"})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		if v, ok := m["foo"]; !ok || v != "bar" {
 | 
						|
			t.Errorf("expected %q to be %q", v, "bar")
 | 
						|
		}
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("stdin_value", func(t *testing.T) {
 | 
						|
		t.Parallel()
 | 
						|
 | 
						|
		stdinR, stdinW := io.Pipe()
 | 
						|
		go func() {
 | 
						|
			stdinW.Write([]byte(`bar`))
 | 
						|
			stdinW.Close()
 | 
						|
		}()
 | 
						|
 | 
						|
		m, err := parseArgsData(stdinR, []string{"foo=-"})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		if v, ok := m["foo"]; !ok || v != "bar" {
 | 
						|
			t.Errorf("expected %q to be %q", v, "bar")
 | 
						|
		}
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("file_full", func(t *testing.T) {
 | 
						|
		t.Parallel()
 | 
						|
 | 
						|
		f, err := ioutil.TempFile("", "vault")
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
		f.Write([]byte(`{"foo":"bar"}`))
 | 
						|
		f.Close()
 | 
						|
		defer os.Remove(f.Name())
 | 
						|
 | 
						|
		m, err := parseArgsData(os.Stdin, []string{"@" + f.Name()})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		if v, ok := m["foo"]; !ok || v != "bar" {
 | 
						|
			t.Errorf("expected %q to be %q", v, "bar")
 | 
						|
		}
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("file_value", func(t *testing.T) {
 | 
						|
		t.Parallel()
 | 
						|
 | 
						|
		f, err := ioutil.TempFile("", "vault")
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
		f.Write([]byte(`bar`))
 | 
						|
		f.Close()
 | 
						|
		defer os.Remove(f.Name())
 | 
						|
 | 
						|
		m, err := parseArgsData(os.Stdin, []string{"foo=@" + f.Name()})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		if v, ok := m["foo"]; !ok || v != "bar" {
 | 
						|
			t.Errorf("expected %q to be %q", v, "bar")
 | 
						|
		}
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("file_value_escaped", func(t *testing.T) {
 | 
						|
		t.Parallel()
 | 
						|
 | 
						|
		m, err := parseArgsData(os.Stdin, []string{`foo=\@`})
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		if v, ok := m["foo"]; !ok || v != "@" {
 | 
						|
			t.Errorf("expected %q to be %q", v, "@")
 | 
						|
		}
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func TestTruncateToSeconds(t *testing.T) {
 | 
						|
	t.Parallel()
 | 
						|
 | 
						|
	cases := []struct {
 | 
						|
		d   time.Duration
 | 
						|
		exp int
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			10 * time.Nanosecond,
 | 
						|
			0,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			10 * time.Microsecond,
 | 
						|
			0,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			10 * time.Millisecond,
 | 
						|
			0,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			1 * time.Second,
 | 
						|
			1,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			10 * time.Second,
 | 
						|
			10,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			100 * time.Second,
 | 
						|
			100,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			3 * time.Minute,
 | 
						|
			180,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			3 * time.Hour,
 | 
						|
			10800,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tc := range cases {
 | 
						|
		tc := tc
 | 
						|
 | 
						|
		t.Run(fmt.Sprintf("%s", tc.d), func(t *testing.T) {
 | 
						|
			t.Parallel()
 | 
						|
 | 
						|
			act := truncateToSeconds(tc.d)
 | 
						|
			if act != tc.exp {
 | 
						|
				t.Errorf("expected %d to be %d", act, tc.exp)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestParseFlagFile(t *testing.T) {
 | 
						|
	t.Parallel()
 | 
						|
 | 
						|
	content := "some raw content"
 | 
						|
	tmpFile, err := ioutil.TempFile(os.TempDir(), "TestParseFlagFile")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatalf("failed to create temporary file: %v", err)
 | 
						|
	}
 | 
						|
 | 
						|
	defer os.Remove(tmpFile.Name())
 | 
						|
 | 
						|
	if _, err := tmpFile.WriteString(content); err != nil {
 | 
						|
		t.Fatalf("failed to write to temporary file: %v", err)
 | 
						|
	}
 | 
						|
 | 
						|
	cases := []struct {
 | 
						|
		value string
 | 
						|
		exp   string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			"",
 | 
						|
			"",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			content,
 | 
						|
			content,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			fmt.Sprintf("@%s", tmpFile.Name()),
 | 
						|
			content,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tc := range cases {
 | 
						|
		tc := tc
 | 
						|
 | 
						|
		t.Run(tc.value, func(t *testing.T) {
 | 
						|
			content, err := parseFlagFile(tc.value)
 | 
						|
			if err != nil {
 | 
						|
				t.Fatalf("unexpected error parsing flag value: %v", err)
 | 
						|
			}
 | 
						|
 | 
						|
			if content != tc.exp {
 | 
						|
				t.Fatalf("expected %s to be %s", content, tc.exp)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |