// Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build dragonfly || freebsd || linux || netbsd || openbsd || solaris // +build dragonfly freebsd linux netbsd openbsd solaris package x509 //import ( // "fmt" // "os" // "testing" //) // //const ( // testDir = "testdata" // testDirCN = "test-dir" // testFile = "test-file.crt" // testFileCN = "test-file" // testMissing = "missing" //) // //func TestEnvVars(t *testing.T) { // testCases := []struct { // name string // fileEnv string // dirEnv string // files []string // dirs []string // cns []string // }{ // { // // Environment variables override the default locations preventing fall through. // name: "override-defaults", // fileEnv: testMissing, // dirEnv: testMissing, // files: []string{testFile}, // dirs: []string{testDir}, // cns: nil, // }, // { // // File environment overrides default file locations. // name: "file", // fileEnv: testFile, // dirEnv: "", // files: nil, // dirs: nil, // cns: []string{testFileCN}, // }, // { // // Directory environment overrides default directory locations. // name: "dir", // fileEnv: "", // dirEnv: testDir, // files: nil, // dirs: nil, // cns: []string{testDirCN}, // }, // { // // File & directory environment overrides both default locations. // name: "file+dir", // fileEnv: testFile, // dirEnv: testDir, // files: nil, // dirs: nil, // cns: []string{testFileCN, testDirCN}, // }, // { // // Environment variable empty / unset uses default locations. // name: "empty-fall-through", // fileEnv: "", // dirEnv: "", // files: []string{testFile}, // dirs: []string{testDir}, // cns: []string{testFileCN, testDirCN}, // }, // } // // // Save old settings so we can restore before the test ends. // origCertFiles, origCertDirectories := certFiles, certDirectories // origFile, origDir := os.Getenv(certFileEnv), os.Getenv(certDirEnv) // defer func() { // certFiles = origCertFiles // certDirectories = origCertDirectories // os.Setenv(certFileEnv, origFile) // os.Setenv(certDirEnv, origDir) // }() // // for _, tc := range testCases { // t.Run(tc.name, func(t *testing.T) { // if err := os.Setenv(certFileEnv, tc.fileEnv); err != nil { // t.Fatalf("setenv %q failed: %v", certFileEnv, err) // } // if err := os.Setenv(certDirEnv, tc.dirEnv); err != nil { // t.Fatalf("setenv %q failed: %v", certDirEnv, err) // } // // certFiles, certDirectories = tc.files, tc.dirs // // r, err := loadSystemRoots() // if err != nil { // t.Fatal("unexpected failure:", err) // } // // if r == nil { // if tc.cns == nil { // // Expected nil // return // } // t.Fatal("nil roots") // } // // // Verify that the returned certs match, otherwise report where the mismatch is. // for i, cn := range tc.cns { // if i >= len(r.certs) { // t.Errorf("missing cert %v @ %v", cn, i) // } else if r.certs[i].Subject.CommonName != cn { // fmt.Printf("%#v\n", r.certs[0].Subject) // t.Errorf("unexpected cert common name %q, want %q", r.certs[i].Subject.CommonName, cn) // } // } // if len(r.certs) > len(tc.cns) { // t.Errorf("got %v certs, which is more than %v wanted", len(r.certs), len(tc.cns)) // } // }) // } //}