 9e5bd5a2dc
			
		
	
	9e5bd5a2dc
	
	
	
		
			
			After review, there are cases where having common requirements for namespaces and identifiers creates contention between applications. One example is that it is nice to have namespaces comply with domain name requirement, but that does not allow underscores, which are required for certain identifiers. The namespaces validation has been reverted to be in line with RFC 1035. Existing identifiers has been modified to allow simply alpha-numeric identifiers, while limiting adjacent separators. We may follow up tweaks for the identifier charset but this split should remove the hard decisions. Signed-off-by: Stephen J Day <stephen.day@docker.com>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package namespaces
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/containerd/containerd/errdefs"
 | |
| )
 | |
| 
 | |
| func TestValidNamespaces(t *testing.T) {
 | |
| 	for _, input := range []string{
 | |
| 		"default",
 | |
| 		"Default",
 | |
| 		t.Name(),
 | |
| 		"default-default",
 | |
| 		"default--default",
 | |
| 		"containerd.io",
 | |
| 		"foo.boo",
 | |
| 		"swarmkit.docker.io",
 | |
| 		"zn--e9.org", // or something like it!
 | |
| 		strings.Repeat("a", maxLength),
 | |
| 	} {
 | |
| 		t.Run(input, func(t *testing.T) {
 | |
| 			if err := Validate(input); err != nil {
 | |
| 				t.Fatalf("unexpected error: %v != nil", err)
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestInvalidNamespaces(t *testing.T) {
 | |
| 	for _, input := range []string{
 | |
| 		".foo..foo",
 | |
| 		"foo/foo",
 | |
| 		"foo/..",
 | |
| 		"foo..foo",
 | |
| 		"foo.-boo",
 | |
| 		"foo.-boo.bar",
 | |
| 		"-foo.boo",
 | |
| 		"foo.boo-",
 | |
| 		"foo_foo.boo_underscores", // boo-urns?
 | |
| 		"0912341234",
 | |
| 		"task.0.0123456789",
 | |
| 		strings.Repeat("a", maxLength+1),
 | |
| 	} {
 | |
| 
 | |
| 		t.Run(input, func(t *testing.T) {
 | |
| 			if err := Validate(input); err == nil {
 | |
| 				t.Fatal("expected invalid error")
 | |
| 			} else if !errdefs.IsInvalidArgument(err) {
 | |
| 				t.Fatal("error should be an invalid identifier error")
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 |