github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/parser/unsafe_test.go (about)

     1  package parser
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/lmorg/murex/test/count"
     8  	"github.com/lmorg/murex/utils/json"
     9  )
    10  
    11  func TestIsCmdUnsafe(t *testing.T) {
    12  	trues := []string{">", ">>", "$var", "@g", "rm"}
    13  	falses := append(safeCmds,
    14  		"open", "regexp", "match",
    15  		"cast", "format", "[", "[[",
    16  		"runtime",
    17  	)
    18  
    19  	count.Tests(t, len(trues)+len(falses))
    20  
    21  	for i := range trues {
    22  		v := isCmdUnsafe(trues[i])
    23  		if v != true {
    24  			t.Errorf("Returned `%s` expected `%s`: '%s'", "false", "true", trues[i])
    25  		}
    26  	}
    27  
    28  	for i := range falses {
    29  		v := isCmdUnsafe(falses[i])
    30  		if v != false {
    31  			t.Errorf("Returned `%s` expected `%s`: '%s'", "true", "false", falses[i])
    32  		}
    33  	}
    34  }
    35  
    36  func TestReadSafeCmds(t *testing.T) {
    37  	count.Tests(t, 1)
    38  
    39  	v, err := ReadSafeCmds()
    40  	if err != nil {
    41  		t.Error(err.Error())
    42  	}
    43  
    44  	switch v.(type) {
    45  	case []string:
    46  		// success
    47  	default:
    48  		t.Errorf("incorrect type. Should be a []string")
    49  	}
    50  }
    51  
    52  func TestWriteSafeCmds(t *testing.T) {
    53  	count.Tests(t, 5)
    54  
    55  	safeCmdsDefault := make([]string, len(safeCmds))
    56  	copy(safeCmdsDefault, safeCmds)
    57  	defer copy(safeCmds, safeCmdsDefault)
    58  
    59  	var v interface{}
    60  
    61  	v = 13
    62  	err := WriteSafeCmds(v)
    63  	if err == nil || !strings.Contains(err.Error(), "invalid data-type") {
    64  		t.Error("invalid data-type accepted:", err)
    65  	}
    66  
    67  	v = []string{"foo", "bar"}
    68  	err = WriteSafeCmds(v)
    69  	if err == nil || !strings.Contains(err.Error(), "invalid data-type") {
    70  		t.Error("invalid data-type accepted:", err)
    71  	}
    72  
    73  	v = "foobar"
    74  	err = WriteSafeCmds(v)
    75  	if err == nil {
    76  		t.Error("value not marshalled as JSON:", err)
    77  	}
    78  
    79  	v = `{"foo": "bar"}`
    80  	err = WriteSafeCmds(v)
    81  	if err == nil {
    82  		t.Error("invalid JSON object accepted:", err)
    83  	}
    84  
    85  	v = `["foo"]`
    86  	err = WriteSafeCmds(v)
    87  	if err != nil {
    88  		t.Error("JSON object should have be valid:", err)
    89  	}
    90  	if len(safeCmds) != 1 || safeCmds[0] != "foo" {
    91  		t.Errorf("safeCmds incorrectly set: %s", json.LazyLogging(safeCmds))
    92  	}
    93  }