reflection work so far...
This commit is contained in:
137
funcs_test.go
137
funcs_test.go
@@ -2,9 +2,117 @@ package cryptparse
|
||||
|
||||
import (
|
||||
`crypto/tls`
|
||||
`embed`
|
||||
`errors`
|
||||
`fmt`
|
||||
`io/fs`
|
||||
`net/url`
|
||||
`os`
|
||||
`strings`
|
||||
"testing"
|
||||
)
|
||||
|
||||
var (
|
||||
// Generated from ../_extra/gen_test_pki
|
||||
|
||||
//go:embed "_testdata"
|
||||
testPems embed.FS
|
||||
testTmpPemFiles map[string]*os.File
|
||||
testKt string = "ed25519"
|
||||
)
|
||||
|
||||
func testInit(t *testing.T) (err error) {
|
||||
|
||||
var n string
|
||||
var nkt string
|
||||
var b []byte
|
||||
var names []fs.DirEntry
|
||||
var ok bool
|
||||
|
||||
if testTmpPemFiles == nil {
|
||||
testTmpPemFiles = make(map[string]*os.File)
|
||||
}
|
||||
|
||||
if names, err = testPems.ReadDir("_testdata"); err != nil {
|
||||
return
|
||||
}
|
||||
// only ".keep" is present.
|
||||
if len(names) == 1 {
|
||||
t.Fatalf(
|
||||
"There aren't any test PEMs."+
|
||||
"You must `go run *.go` in _extras/gen_test_pki and copy the %s PEMs into _testdata.",
|
||||
testKt,
|
||||
)
|
||||
}
|
||||
|
||||
// populate tmpFiles from the embed.FS `pems` and write out to temp files.
|
||||
for _, p := range []string{
|
||||
"ca",
|
||||
"inter",
|
||||
"leaf_server",
|
||||
"leaf_user",
|
||||
} {
|
||||
for _, pt := range []string{
|
||||
"cert",
|
||||
"csr",
|
||||
"key",
|
||||
} {
|
||||
n = fmt.Sprintf("%s_%s", p, pt)
|
||||
nkt = fmt.Sprintf("%s_%s_%s", p, testKt, pt)
|
||||
if _, ok = testTmpPemFiles[n]; !ok {
|
||||
if b, err = testPems.ReadFile(fmt.Sprintf("_testdata/%s.pem", nkt)); err != nil {
|
||||
t.Fatalf("Read '%s' failed: %v", nkt, err)
|
||||
}
|
||||
if testTmpPemFiles[n], err = os.CreateTemp("", fmt.Sprintf(".*.%s.pem", n)); err != nil {
|
||||
t.Fatalf("Create temp file for %s failed: %v", n, err)
|
||||
}
|
||||
if _, err = testTmpPemFiles[n].Write(b); err != nil {
|
||||
t.Fatalf("Write to %s failed: %v", n, err)
|
||||
}
|
||||
if err = testTmpPemFiles[n].Close(); err != nil {
|
||||
t.Fatalf("Closing %s failed: %v", n, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(p, "leaf_") {
|
||||
n = fmt.Sprintf("%s_chained", p)
|
||||
nkt = fmt.Sprintf("%s_%s_cert_chained.pem", p, testKt)
|
||||
if _, ok = testTmpPemFiles[n]; !ok {
|
||||
if b, err = testPems.ReadFile(fmt.Sprintf("_testdata/%s.pem", nkt)); err != nil {
|
||||
t.Fatalf("Read '%s' failed: %v", nkt, err)
|
||||
}
|
||||
if testTmpPemFiles[n], err = os.CreateTemp("", fmt.Sprintf(".*.%s.pem", n)); err != nil {
|
||||
t.Fatalf("Create temp file for %s failed: %v", n, err)
|
||||
}
|
||||
if _, err = testTmpPemFiles[n].Write(b); err != nil {
|
||||
t.Fatalf("Write to %s failed: %v", n, err)
|
||||
}
|
||||
if err = testTmpPemFiles[n].Close(); err != nil {
|
||||
t.Fatalf("Closing %s failed: %v", n, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
t.Cleanup(func() {
|
||||
var cErr error
|
||||
for k, f := range testTmpPemFiles {
|
||||
if cErr = f.Close(); cErr != nil && !errors.Is(cErr, os.ErrClosed) {
|
||||
t.Logf("Error when closing %s '%s': %v", k, f.Name(), cErr)
|
||||
cErr = nil
|
||||
} else if cErr != nil {
|
||||
cErr = nil
|
||||
}
|
||||
if cErr = os.Remove(f.Name()); cErr != nil {
|
||||
t.Logf("Error when removing %s '%s': %v", k, f.Name(), cErr)
|
||||
cErr = nil
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func TestCiphers(t *testing.T) {
|
||||
|
||||
var err error
|
||||
@@ -35,3 +143,32 @@ func TestCiphers(t *testing.T) {
|
||||
|
||||
_ = cs
|
||||
}
|
||||
|
||||
func TestTlsUri(t *testing.T) {
|
||||
|
||||
var err error
|
||||
var uStr string
|
||||
var u *url.URL
|
||||
var tlsU *TlsUri
|
||||
|
||||
if err = testInit(t); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
uStr = fmt.Sprintf(
|
||||
"https://:9091/?"+
|
||||
"pki_ca=%s&"+ // testTmpFiles["ca_cert"]
|
||||
"pki_cert=%s&"+ // testTmpFiles["leaf_server_chained"]
|
||||
"pki_key=%s&"+ // testTmpFiles["leaf_server_key"]
|
||||
"min_tls=1.2&max_tls=1.2&"+
|
||||
"sni=server.example.com",
|
||||
testTmpPemFiles["ca_cert"], testTmpPemFiles["leaf_server_chained"], testTmpPemFiles["leaf_server_key"],
|
||||
)
|
||||
if u, err = url.Parse(uStr); err != nil {
|
||||
t.Fatalf("Failed to parse URL string '%s': %v", uStr, err)
|
||||
}
|
||||
|
||||
tlsU = &TlsUri{
|
||||
URL: u,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user