// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package mssql import ( "os" "testing" _ "github.com/denisenkom/go-mssqldb" log "github.com/hashicorp/go-hclog" "github.com/hashicorp/vault/sdk/helper/logging" "github.com/hashicorp/vault/sdk/physical" ) // TestInvalidIdentifier checks validity of an identifier func TestInvalidIdentifier(t *testing.T) { testcases := map[string]bool{ "name": true, "_name": true, "Name": true, "#name": false, "?Name": false, "9name": false, "@name": false, "$name": false, " name": false, "n ame": false, "n4444444": true, "_4321098765": true, "_##$$@@__": true, "_123name#@": true, "name!": false, "name%": false, "name^": false, "name&": false, "name*": false, "name(": false, "name)": false, "nåame": true, "åname": true, "name'": false, "nam`e": false, "пример": true, "_#Āā@#$_ĂĄąćĈĉĊċ": true, "ÛÜÝÞßàáâ": true, "豈更滑a23$#@": true, } for i, expected := range testcases { if !isInvalidIdentifier(i) != expected { t.Fatalf("unexpected identifier %s: expected validity %v", i, expected) } } } func TestMSSQLBackend(t *testing.T) { server := os.Getenv("MSSQL_SERVER") if server == "" { t.SkipNow() } database := os.Getenv("MSSQL_DB") if database == "" { database = "test" } table := os.Getenv("MSSQL_TABLE") if table == "" { table = "test" } schema := os.Getenv("MSSQL_SCHEMA") if schema == "" { schema = "test" } username := os.Getenv("MSSQL_USERNAME") password := os.Getenv("MSSQL_PASSWORD") // Run vault tests logger := logging.NewVaultLogger(log.Debug) b, err := NewMSSQLBackend(map[string]string{ "server": server, "database": database, "table": table, "schema": schema, "username": username, "password": password, }, logger) if err != nil { t.Fatalf("Failed to create new backend: %v", err) } defer func() { mssql := b.(*MSSQLBackend) _, err := mssql.client.Exec("DROP TABLE " + mssql.dbTable) if err != nil { t.Fatalf("Failed to drop table: %v", err) } }() physical.ExerciseBackend(t, b) physical.ExerciseBackend_ListPrefix(t, b) } func TestMSSQLBackend_schema(t *testing.T) { server := os.Getenv("MSSQL_SERVER") if server == "" { t.SkipNow() } database := os.Getenv("MSSQL_DB") if database == "" { database = "test" } table := os.Getenv("MSSQL_TABLE") if table == "" { table = "test" } schema := os.Getenv("MSSQL_SCHEMA") if schema == "" { schema = "test" } username := os.Getenv("MSSQL_USERNAME") password := os.Getenv("MSSQL_PASSWORD") // Run vault tests logger := logging.NewVaultLogger(log.Debug) b, err := NewMSSQLBackend(map[string]string{ "server": server, "database": database, "schema": schema, "table": table, "username": username, "password": password, }, logger) if err != nil { t.Fatalf("Failed to create new backend: %v", err) } defer func() { mssql := b.(*MSSQLBackend) _, err := mssql.client.Exec("DROP TABLE " + mssql.dbTable) if err != nil { t.Fatalf("Failed to drop table: %v", err) } }() physical.ExerciseBackend(t, b) physical.ExerciseBackend_ListPrefix(t, b) }