| // Copyright 2022 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. |
| |
| package x509 |
| |
| import "testing" |
| |
| func TestCertPoolEqual(t *testing.T) { |
| tc := &Certificate{Raw: []byte{1, 2, 3}, RawSubject: []byte{2}} |
| otherTC := &Certificate{Raw: []byte{9, 8, 7}, RawSubject: []byte{8}} |
| |
| emptyPool := NewCertPool() |
| nonSystemPopulated := NewCertPool() |
| nonSystemPopulated.AddCert(tc) |
| nonSystemPopulatedAlt := NewCertPool() |
| nonSystemPopulatedAlt.AddCert(otherTC) |
| emptySystem, err := SystemCertPool() |
| if err != nil { |
| t.Fatal(err) |
| } |
| populatedSystem, err := SystemCertPool() |
| if err != nil { |
| t.Fatal(err) |
| } |
| populatedSystem.AddCert(tc) |
| populatedSystemAlt, err := SystemCertPool() |
| if err != nil { |
| t.Fatal(err) |
| } |
| populatedSystemAlt.AddCert(otherTC) |
| tests := []struct { |
| name string |
| a *CertPool |
| b *CertPool |
| equal bool |
| }{ |
| { |
| name: "two empty pools", |
| a: emptyPool, |
| b: emptyPool, |
| equal: true, |
| }, |
| { |
| name: "one empty pool, one populated pool", |
| a: emptyPool, |
| b: nonSystemPopulated, |
| equal: false, |
| }, |
| { |
| name: "two populated pools", |
| a: nonSystemPopulated, |
| b: nonSystemPopulated, |
| equal: true, |
| }, |
| { |
| name: "two populated pools, different content", |
| a: nonSystemPopulated, |
| b: nonSystemPopulatedAlt, |
| equal: false, |
| }, |
| { |
| name: "two empty system pools", |
| a: emptySystem, |
| b: emptySystem, |
| equal: true, |
| }, |
| { |
| name: "one empty system pool, one populated system pool", |
| a: emptySystem, |
| b: populatedSystem, |
| equal: false, |
| }, |
| { |
| name: "two populated system pools", |
| a: populatedSystem, |
| b: populatedSystem, |
| equal: true, |
| }, |
| { |
| name: "two populated pools, different content", |
| a: populatedSystem, |
| b: populatedSystemAlt, |
| equal: false, |
| }, |
| { |
| name: "two nil pools", |
| a: nil, |
| b: nil, |
| equal: true, |
| }, |
| { |
| name: "one nil pool, one empty pool", |
| a: nil, |
| b: emptyPool, |
| equal: false, |
| }, |
| } |
| |
| for _, tc := range tests { |
| t.Run(tc.name, func(t *testing.T) { |
| equal := tc.a.Equal(tc.b) |
| if equal != tc.equal { |
| t.Errorf("Unexpected Equal result: got %t, want %t", equal, tc.equal) |
| } |
| }) |
| } |
| } |