Skip to content
Snippets Groups Projects
ldap_test.go 24.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	// Shallow copy.
    	c := *config
    
    	// We need to configure host parameters but don't want to overwrite user or
    	// group search configuration.
    
    	switch connMethod {
    	case connectStartTLS:
    
    		c.Host = fmt.Sprintf("%s:%s", ip, port.Port())
    		c.RootCA = "testdata/certs/ca.crt"
    
    		c.StartTLS = true
    	case connectLDAPS:
    
    		c.Host = fmt.Sprintf("%s:%s", ip, tlsPort.Port())
    		c.RootCA = "testdata/certs/ca.crt"
    
    	case connectInsecureSkipVerify:
    
    		c.Host = fmt.Sprintf("%s:%s", ip, tlsPort.Port())
    
    		c.InsecureSkipVerify = true
    
    		c.Host = fmt.Sprintf("%s:%s", ip, port.Port())
    
    	c.BindDN = "cn=admin,dc=example,dc=org"
    	c.BindPW = "admin"
    
    	l := &logrus.Logger{Out: ioutil.Discard, Formatter: &logrus.TextFormatter{}}
    
    	conn, err := c.openConnector(l)
    	if err != nil {
    		t.Errorf("open connector: %v", err)
    	}
    
    	for _, test := range tests {
    		if test.name == "" {
    			t.Fatal("go a subtest with no name")
    		}
    
    		// Run the subtest.
    		t.Run(test.name, func(t *testing.T) {
    			s := connector.Scopes{OfflineAccess: true, Groups: test.groups}
    			ident, validPW, err := conn.Login(context.Background(), s, test.username, test.password)
    			if err != nil {
    				if !test.wantErr {
    					t.Fatalf("query failed: %v", err)
    				}
    				return
    			}
    			if test.wantErr {
    				t.Fatalf("wanted query to fail")
    			}
    
    			if !validPW {
    				if !test.wantBadPW {
    					t.Fatalf("invalid password: %v", err)
    				}
    				return
    			}
    
    			if test.wantBadPW {
    				t.Fatalf("wanted invalid password")
    			}
    			got := ident
    			got.ConnectorData = nil
    
    			if diff := pretty.Compare(test.want, got); diff != "" {
    				t.Error(diff)
    				return
    			}
    
    			// Verify that refresh tokens work.
    			ident, err = conn.Refresh(context.Background(), s, ident)
    			if err != nil {
    				t.Errorf("refresh failed: %v", err)
    			}
    
    			got = ident
    			got.ConnectorData = nil
    
    			if diff := pretty.Compare(test.want, got); diff != "" {
    				t.Errorf("after refresh: %s", diff)
    			}
    		})
    	}
    }