// Copyright (c) 2017-2019 Snowflake Computing Inc. All right reserved. package gosnowflake import ( "context" "errors" "net/http" "net/url" "testing" "time" ) func TestUnitPostBackURL(t *testing.T) { c := `
` pbURL, err := postBackURL([]byte(c)) if err != nil { t.Fatalf("failed to get URL. err: %v, %v", err, c) } if pbURL.String() != "https://abc.com/" { t.Errorf("failed to get URL. got: %v, %v", pbURL, c) } c = `` _, err = postBackURL([]byte(c)) if err == nil { t.Fatalf("should have failed") } c = `` _, err = postBackURL([]byte(c)) if err == nil { t.Fatalf("should have failed") } c = ``), nil } func getSSOSuccess(_ context.Context, _ *snowflakeRestful, _ *url.Values, _ map[string]string, _ string, _ time.Duration) ([]byte, error) { return []byte(``), nil } func TestUnitAuthenticateBySAML(t *testing.T) { authenticator := &url.URL{ Scheme: "https", Host: "abc.com", } application := "testapp" account := "testaccount" user := "u" password := "p" sr := &snowflakeRestful{ Protocol: "https", Host: "abc.com", Port: 443, FuncPostAuthSAML: postAuthSAMLError, TokenAccessor: getSimpleTokenAccessor(), } var err error _, err = authenticateBySAML(context.TODO(), sr, authenticator, application, account, user, password) if err == nil { t.Fatal("should have failed.") } sr.FuncPostAuthSAML = postAuthSAMLAuthFail _, err = authenticateBySAML(context.TODO(), sr, authenticator, application, account, user, password) if err == nil { t.Fatal("should have failed.") } sr.FuncPostAuthSAML = postAuthSAMLAuthSuccessButInvalidURL _, err = authenticateBySAML(context.TODO(), sr, authenticator, application, account, user, password) if err == nil { t.Fatal("should have failed.") } driverErr, ok := err.(*SnowflakeError) if !ok { t.Fatalf("should be snowflake error. err: %v", err) } if driverErr.Number != ErrCodeIdpConnectionError { t.Fatalf("unexpected error code. expected: %v, got: %v", ErrCodeIdpConnectionError, driverErr.Number) } sr.FuncPostAuthSAML = postAuthSAMLAuthSuccess sr.FuncPostAuthOKTA = postAuthOKTAError _, err = authenticateBySAML(context.TODO(), sr, authenticator, application, account, user, password) if err == nil { t.Fatal("should have failed.") } sr.FuncPostAuthOKTA = postAuthOKTASuccess sr.FuncGetSSO = getSSOError _, err = authenticateBySAML(context.TODO(), sr, authenticator, application, account, user, password) if err == nil { t.Fatal("should have failed.") } sr.FuncGetSSO = getSSOSuccessButInvalidURL _, err = authenticateBySAML(context.TODO(), sr, authenticator, application, account, user, password) if err == nil { t.Fatal("should have failed.") } sr.FuncGetSSO = getSSOSuccess _, err = authenticateBySAML(context.TODO(), sr, authenticator, application, account, user, password) if err != nil { t.Fatalf("failed. err: %v", err) } }