Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions internal/cmd/skupper/connector/nonkube/connector_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ func (cmd *CmdConnectorCreate) ValidateInput(args []string) error {
numberValidator := validator.NewNumberValidator()
connectorTypeValidator := validator.NewOptionValidator(common.ConnectorTypes)
hostStringValidator := validator.NewHostStringValidator()
namespaceStringValidator := validator.NamespaceStringValidator()

if cmd.namespace != "" {
ok, err := namespaceStringValidator.Evaluate(cmd.namespace)
if !ok {
validationErrors = append(validationErrors, fmt.Errorf("namespace is not valid: %s", err))
}
}

// Validate arguments name and port
if len(args) < 2 {
Expand Down
24 changes: 21 additions & 3 deletions internal/cmd/skupper/connector/nonkube/connector_create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
func TestNonKubeCmdConnectorCreate_ValidateInput(t *testing.T) {
type test struct {
name string
namespace string
args []string
k8sObjects []runtime.Object
skupperObjects []runtime.Object
Expand All @@ -26,54 +27,63 @@ func TestNonKubeCmdConnectorCreate_ValidateInput(t *testing.T) {
testTable := []test{
{
name: "Connector name and port are not specified",
namespace: "test",
args: []string{},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
expectedError: "connector name and port must be configured",
},
{
name: "Connector name is not valid",
namespace: "test",
args: []string{"my new Connector", "8080"},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
expectedError: "connector name is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])*(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])*)*$",
},
{
name: "Connector name is empty",
namespace: "test",
args: []string{"", "1234"},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
expectedError: "connector name must not be empty",
},
{
name: "connector port empty",
namespace: "test",
args: []string{"my-name-port-empty", ""},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
expectedError: "connector port must not be empty",
},
{
name: "port is not valid",
namespace: "test",
args: []string{"my-connector-port", "abcd"},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
expectedError: "connector port is not valid: strconv.Atoi: parsing \"abcd\": invalid syntax",
},
{
name: "port not positive",
namespace: "test",
args: []string{"my-port-positive", "-45"},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
expectedError: "connector port is not valid: value is not positive",
},
{
name: "more than two arguments was specified",
namespace: "test",
args: []string{"my", "Connector", "test"},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
expectedError: "only two arguments are allowed for this command",
},
{
name: "type is not valid",
namespace: "test",
args: []string{"my-connector", "8080"},
flags: &common.CommandConnectorCreateFlags{ConnectorType: "not-valid", Host: "1.2.3.4"},
expectedError: "connector type is not valid: value not-valid not allowed. It should be one of this options: [tcp]",
},
{
name: "routing key is not valid",
namespace: "test",
args: []string{"my-connector-rk", "8080"},
flags: &common.CommandConnectorCreateFlags{RoutingKey: "not-valid$", Host: "1.2.3.4"},
expectedError: "routing key is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])*(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])*)*$",
Expand All @@ -96,7 +106,6 @@ func TestNonKubeCmdConnectorCreate_ValidateInput(t *testing.T) {
flags: &common.CommandConnectorCreateFlags{},
},
{

name: "kubernetes flags are not valid on this platform",
args: []string{"my-connector", "8080"},
flags: &common.CommandConnectorCreateFlags{Host: "1.2.3.4"},
Expand All @@ -106,8 +115,16 @@ func TestNonKubeCmdConnectorCreate_ValidateInput(t *testing.T) {
},
},
{
name: "flags all valid",
args: []string{"my-connector-flags", "8080"},
name: "invalid namespace",
namespace: "TestInvalid",
args: []string{"my-connector-invalid", "8080"},
flags: &common.CommandConnectorCreateFlags{},
expectedError: "namespace is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",
},
{
name: "flags all valid",
namespace: "test",
args: []string{"my-connector-flags", "8080"},
flags: &common.CommandConnectorCreateFlags{
RoutingKey: "routingkeyname",
TlsCredentials: "secretname",
Expand All @@ -126,6 +143,7 @@ func TestNonKubeCmdConnectorCreate_ValidateInput(t *testing.T) {
if test.flags != nil {
command.Flags = test.flags
}
command.namespace = test.namespace

if test.cobraGenericFlags != nil && len(test.cobraGenericFlags) > 0 {
for name, value := range test.cobraGenericFlags {
Expand Down
8 changes: 8 additions & 0 deletions internal/cmd/skupper/connector/nonkube/connector_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ func (cmd *CmdConnectorDelete) ValidateInput(args []string) error {
var validationErrors []error
opts := fs.GetOptions{RuntimeFirst: false, LogWarning: false}
resourceStringValidator := validator.NewResourceStringValidator()
namespaceStringValidator := validator.NamespaceStringValidator()

if cmd.CobraCmd != nil && cmd.CobraCmd.Flag(common.FlagNameContext) != nil && cmd.CobraCmd.Flag(common.FlagNameContext).Value.String() != "" {
fmt.Println("Warning: --context flag is not supported on this platform")
Expand All @@ -43,6 +44,13 @@ func (cmd *CmdConnectorDelete) ValidateInput(args []string) error {
fmt.Println("Warning: --kubeconfig flag is not supported on this platform")
}

if cmd.namespace != "" {
ok, err := namespaceStringValidator.Evaluate(cmd.namespace)
if !ok {
validationErrors = append(validationErrors, fmt.Errorf("namespace is not valid: %s", err))
}
}

// Validate arguments name
if len(args) < 1 {
validationErrors = append(validationErrors, fmt.Errorf("connector name must be configured"))
Expand Down
11 changes: 11 additions & 0 deletions internal/cmd/skupper/connector/nonkube/connector_delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
func TestCmdConnectorDelete_ValidateInput(t *testing.T) {
type test struct {
name string
namespace string
args []string
flags *common.CommandConnectorDeleteFlags
cobraGenericFlags map[string]string
Expand All @@ -36,12 +37,14 @@ func TestCmdConnectorDelete_ValidateInput(t *testing.T) {
testTable := []test{
{
name: "connector name is not specified",
namespace: "test",
args: []string{},
flags: &common.CommandConnectorDeleteFlags{},
expectedError: "connector name must be configured",
},
{
name: "connector name is nil",
namespace: "test",
args: []string{""},
flags: &common.CommandConnectorDeleteFlags{},
expectedError: "connector name must not be empty",
Expand Down Expand Up @@ -74,6 +77,13 @@ func TestCmdConnectorDelete_ValidateInput(t *testing.T) {
common.FlagNameKubeconfig: "test",
},
},
{
name: "invalid namespace",
namespace: "Test5",
args: []string{"my-connector"},
flags: &common.CommandConnectorDeleteFlags{},
expectedError: "namespace is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",
},
}

//Add a temp file so connector exists for update tests will pass
Expand Down Expand Up @@ -105,6 +115,7 @@ func TestCmdConnectorDelete_ValidateInput(t *testing.T) {
if test.flags != nil {
command.Flags = test.flags
}
command.namespace = test.namespace

if test.cobraGenericFlags != nil && len(test.cobraGenericFlags) > 0 {
for name, value := range test.cobraGenericFlags {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ func (cmd *CmdConnectorGenerate) ValidateInput(args []string) error {
connectorTypeValidator := validator.NewOptionValidator(common.ConnectorTypes)
outputTypeValidator := validator.NewOptionValidator(common.OutputTypes)
hostStringValidator := validator.NewHostStringValidator()
namespaceStringValidator := validator.NamespaceStringValidator()

if cmd.namespace != "" {
ok, err := namespaceStringValidator.Evaluate(cmd.namespace)
if !ok {
validationErrors = append(validationErrors, fmt.Errorf("namespace is not valid: %s", err))
}
}

// Validate arguments name and port
if len(args) < 2 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
func TestNonKubeCmdConnectorGenerate_ValidateInput(t *testing.T) {
type test struct {
name string
namespace string
args []string
k8sObjects []runtime.Object
skupperObjects []runtime.Object
Expand All @@ -26,42 +27,49 @@ func TestNonKubeCmdConnectorGenerate_ValidateInput(t *testing.T) {
testTable := []test{
{
name: "Connector name and port are not specified",
namespace: "test",
args: []string{},
flags: &common.CommandConnectorGenerateFlags{Host: "1.2.3.4"},
expectedError: "connector name and port must be configured",
},
{
name: "Connector name is not valid",
namespace: "test",
args: []string{"my new Connector", "8080"},
flags: &common.CommandConnectorGenerateFlags{Host: "1.2.3.4"},
expectedError: "connector name is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])*(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])*)*$",
},
{
name: "Connector name is empty",
namespace: "test",
args: []string{"", "1234"},
flags: &common.CommandConnectorGenerateFlags{Host: "1.2.3.4"},
expectedError: "connector name must not be empty",
},
{
name: "connector port empty",
namespace: "test",
args: []string{"my-name-port-empty", ""},
flags: &common.CommandConnectorGenerateFlags{Host: "1.2.3.4"},
expectedError: "connector port must not be empty",
},
{
name: "port is not valid",
namespace: "test",
args: []string{"my-connector-port", "abcd"},
flags: &common.CommandConnectorGenerateFlags{Host: "1.2.3.4"},
expectedError: "connector port is not valid: strconv.Atoi: parsing \"abcd\": invalid syntax",
},
{
name: "port not positive",
namespace: "test",
args: []string{"my-port-positive", "-45"},
flags: &common.CommandConnectorGenerateFlags{Host: "1.2.3.4"},
expectedError: "connector port is not valid: value is not positive",
},
{
name: "more than two arguments was specified",
namespace: "test",
args: []string{"my", "Connector", "test"},
flags: &common.CommandConnectorGenerateFlags{Host: "1.2.3.4"},
expectedError: "only two arguments are allowed for this command",
Expand Down Expand Up @@ -91,12 +99,14 @@ func TestNonKubeCmdConnectorGenerate_ValidateInput(t *testing.T) {
},
{
name: "tlsCredentials is not valid",
namespace: "test",
args: []string{"my-connector-tls", "8080"},
flags: &common.CommandConnectorGenerateFlags{TlsCredentials: "not-valid$", Host: "1.2.3.4"},
expectedError: "tlsCredentials is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])*(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])*)*$",
},
{
name: "output format is not valid",
namespace: "test",
args: []string{"my-connector", "8080"},
flags: &common.CommandConnectorGenerateFlags{Output: "not-valid", Host: "1.2.3.4"},
expectedError: "output type is not valid: value not-valid not allowed. It should be one of this options: [json yaml]",
Expand All @@ -110,6 +120,13 @@ func TestNonKubeCmdConnectorGenerate_ValidateInput(t *testing.T) {
common.FlagNameKubeconfig: "test",
},
},
{
name: "invalid namespace",
namespace: "TestInvalid",
args: []string{"my-connector", "8080"},
flags: &common.CommandConnectorGenerateFlags{},
expectedError: "namespace is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",
},
{
name: "flags all valid",
args: []string{"my-connector-flags", "8080"},
Expand All @@ -131,6 +148,7 @@ func TestNonKubeCmdConnectorGenerate_ValidateInput(t *testing.T) {
if test.flags != nil {
command.Flags = test.flags
}
command.namespace = test.namespace

if test.cobraGenericFlags != nil && len(test.cobraGenericFlags) > 0 {
for name, value := range test.cobraGenericFlags {
Expand Down
8 changes: 8 additions & 0 deletions internal/cmd/skupper/connector/nonkube/connector_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func (cmd *CmdConnectorUpdate) ValidateInput(args []string) error {
numberValidator := validator.NewNumberValidator()
connectorTypeValidator := validator.NewOptionValidator(common.ConnectorTypes)
hostStringValidator := validator.NewHostStringValidator()
namespaceStringValidator := validator.NamespaceStringValidator()

if cmd.CobraCmd != nil && cmd.CobraCmd.Flag(common.FlagNameContext) != nil && cmd.CobraCmd.Flag(common.FlagNameContext).Value.String() != "" {
fmt.Println("Warning: --context flag is not supported on this platform")
Expand All @@ -57,6 +58,13 @@ func (cmd *CmdConnectorUpdate) ValidateInput(args []string) error {
fmt.Println("Warning: --kubeconfig flag is not supported on this platform")
}

if cmd.namespace != "" {
ok, err := namespaceStringValidator.Evaluate(cmd.namespace)
if !ok {
validationErrors = append(validationErrors, fmt.Errorf("namespace is not valid: %s", err))
}
}

// Validate arguments name
if len(args) < 1 {
validationErrors = append(validationErrors, fmt.Errorf("connector name must be configured"))
Expand Down
16 changes: 14 additions & 2 deletions internal/cmd/skupper/connector/nonkube/connector_update_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
func TestCmdConnectorUpdate_ValidateInput(t *testing.T) {
type test struct {
name string
namespace string
args []string
flags *common.CommandConnectorUpdateFlags
cobraGenericFlags map[string]string
Expand All @@ -35,12 +36,14 @@ func TestCmdConnectorUpdate_ValidateInput(t *testing.T) {
testTable := []test{
{
name: "connector is not updated because get connector returned error",
namespace: "test",
args: []string{"no-connector"},
flags: &common.CommandConnectorUpdateFlags{Host: "1.2.3.4"},
expectedError: "connector no-connector must exist in namespace test to be updated",
},
{
name: "connector name is not specified",
namespace: "test",
args: []string{},
flags: &common.CommandConnectorUpdateFlags{Host: "localhost"},
expectedError: "connector name must be configured",
Expand Down Expand Up @@ -104,8 +107,16 @@ func TestCmdConnectorUpdate_ValidateInput(t *testing.T) {
expectedError: "",
},
{
name: "flags all valid",
args: []string{"my-connector"},
name: "invalid namespace",
namespace: "TestInvalid",
args: []string{"my-connector"},
flags: &common.CommandConnectorUpdateFlags{Host: "localhost"},
expectedError: "namespace is not valid: value does not match this regular expression: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",
},
{
name: "flags all valid",
namespace: "test",
args: []string{"my-connector"},
flags: &common.CommandConnectorUpdateFlags{
RoutingKey: "routingkeyname",
TlsCredentials: "secretname",
Expand Down Expand Up @@ -151,6 +162,7 @@ func TestCmdConnectorUpdate_ValidateInput(t *testing.T) {
if test.flags != nil {
command.Flags = test.flags
}
command.namespace = test.namespace

if test.cobraGenericFlags != nil && len(test.cobraGenericFlags) > 0 {
for name, value := range test.cobraGenericFlags {
Expand Down
8 changes: 8 additions & 0 deletions internal/cmd/skupper/link/nonkube/link_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ func (cmd *CmdLinkDelete) NewClient(cobraCommand *cobra.Command, args []string)
func (cmd *CmdLinkDelete) ValidateInput(args []string) error {
var validationErrors []error
resourceStringValidator := validator.NewResourceStringValidator()
namespaceStringValidator := validator.NamespaceStringValidator()

if cmd.namespace != "" {
ok, err := namespaceStringValidator.Evaluate(cmd.namespace)
if !ok {
validationErrors = append(validationErrors, fmt.Errorf("namespace is not valid: %s", err))
}
}

// Validate arguments name if specified
if len(args) > 1 {
Expand Down
Loading