--- /dev/null
+// 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) {
+ a, b := NewCertPool(), NewCertPool()
+ if !a.Equal(b) {
+ t.Error("two empty pools not equal")
+ }
+
+ tc := &Certificate{Raw: []byte{1, 2, 3}, RawSubject: []byte{2}}
+ a.AddCert(tc)
+ if a.Equal(b) {
+ t.Error("empty pool equals non-empty pool")
+ }
+
+ b.AddCert(tc)
+ if !a.Equal(b) {
+ t.Error("two non-empty pools not equal")
+ }
+
+ otherTC := &Certificate{Raw: []byte{9, 8, 7}, RawSubject: []byte{8}}
+ a.AddCert(otherTC)
+ if a.Equal(b) {
+ t.Error("non-equal pools equal")
+ }
+
+ systemA, err := SystemCertPool()
+ if err != nil {
+ t.Fatalf("unable to load system cert pool: %s", err)
+ }
+ systemB, err := SystemCertPool()
+ if err != nil {
+ t.Fatalf("unable to load system cert pool: %s", err)
+ }
+ if !systemA.Equal(systemB) {
+ t.Error("two empty system pools not equal")
+ }
+
+ systemA.AddCert(tc)
+ if systemA.Equal(systemB) {
+ t.Error("empty system pool equals non-empty system pool")
+ }
+
+ systemB.AddCert(tc)
+ if !systemA.Equal(systemB) {
+ t.Error("two non-empty system pools not equal")
+ }
+
+ systemA.AddCert(otherTC)
+ if systemA.Equal(systemB) {
+ t.Error("non-equal system pools equal")
+ }
+}