diff --git a/internal/plugin/metadata_legacy.go b/internal/plugin/metadata_legacy.go index 562a0287e..3cd1a50cd 100644 --- a/internal/plugin/metadata_legacy.go +++ b/internal/plugin/metadata_legacy.go @@ -68,9 +68,6 @@ type MetadataLegacy struct { } func (m *MetadataLegacy) Validate() error { - if m.Name == "" { - return fmt.Errorf("missing plugin name") - } if !validPluginName.MatchString(m.Name) { return fmt.Errorf("invalid plugin name %q: must contain only a-z, A-Z, 0-9, _ and -", m.Name) } diff --git a/internal/plugin/metadata_legacy_test.go b/internal/plugin/metadata_legacy_test.go index caabcc12a..1ee23739c 100644 --- a/internal/plugin/metadata_legacy_test.go +++ b/internal/plugin/metadata_legacy_test.go @@ -16,40 +16,49 @@ limitations under the License. package plugin import ( - "strings" "testing" ) -func TestMetadataLegacyValidate_EmptyName(t *testing.T) { - metadata := MetadataLegacy{ - Name: "", - Version: "1.0.0", - } - - err := metadata.Validate() - if err == nil { - t.Fatal("expected error for empty plugin name") - } +func TestMetadataLegacyValidate_PluginName(t *testing.T) { + tests := []struct { + name string + pluginName string + shouldPass bool + }{ + // Valid names + {"lowercase", "myplugin", true}, + {"uppercase", "MYPLUGIN", true}, + {"mixed case", "MyPlugin", true}, + {"with digits", "plugin123", true}, + {"with hyphen", "my-plugin", true}, + {"with underscore", "my_plugin", true}, + {"mixed chars", "my-awesome_plugin_123", true}, - expectedMsg := "plugin name is empty or missing" - if !strings.Contains(err.Error(), expectedMsg) { - t.Errorf("expected error to contain %q, got %q", expectedMsg, err.Error()) + // Invalid names + {"empty", "", false}, + {"space", "my plugin", false}, + {"colon", "Name:", false}, + {"period", "my.plugin", false}, + {"slash", "my/plugin", false}, + {"dollar", "$plugin", false}, + {"unicode", "plügîn", false}, } -} -func TestMetadataLegacyValidate_InvalidName(t *testing.T) { - metadata := MetadataLegacy{ - Name: "invalid name", - Version: "1.0.0", - } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + metadata := MetadataLegacy{ + Name: tt.pluginName, + Version: "1.0.0", + } - err := metadata.Validate() - if err == nil { - t.Fatal("expected error for invalid plugin name") - } + err := metadata.Validate() - expectedMsg := "plugin names can only contain ASCII characters" - if !strings.Contains(err.Error(), expectedMsg) { - t.Errorf("expected error to contain %q, got %q", expectedMsg, err.Error()) + if tt.shouldPass && err != nil { + t.Errorf("expected %q to be valid, got error: %v", tt.pluginName, err) + } + if !tt.shouldPass && err == nil { + t.Errorf("expected %q to be invalid, but passed", tt.pluginName) + } + }) } } diff --git a/internal/plugin/metadata_v1.go b/internal/plugin/metadata_v1.go index 5e83bd352..81dbc2e20 100644 --- a/internal/plugin/metadata_v1.go +++ b/internal/plugin/metadata_v1.go @@ -47,11 +47,8 @@ type MetadataV1 struct { } func (m *MetadataV1) Validate() error { - if m.Name == "" { - return fmt.Errorf("missing plugin `name`") - } if !validPluginName.MatchString(m.Name) { - return fmt.Errorf("invalid plugin `name` %q: must contain only a-z, A-Z, 0-9, _ and -", m.Name) + return fmt.Errorf("invalid plugin `name`") } if m.APIVersion != "v1" {