github.com/letsencrypt/boulder@v0.20251208.0/sa/type-converter_test.go (about)

     1  package sa
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/letsencrypt/boulder/core"
     9  	"github.com/letsencrypt/boulder/identifier"
    10  	"github.com/letsencrypt/boulder/test"
    11  
    12  	"github.com/go-jose/go-jose/v4"
    13  )
    14  
    15  const JWK1JSON = `{
    16    "kty": "RSA",
    17    "n": "vuc785P8lBj3fUxyZchF_uZw6WtbxcorqgTyq-qapF5lrO1U82Tp93rpXlmctj6fyFHBVVB5aXnUHJ7LZeVPod7Wnfl8p5OyhlHQHC8BnzdzCqCMKmWZNX5DtETDId0qzU7dPzh0LP0idt5buU7L9QNaabChw3nnaL47iu_1Di5Wp264p2TwACeedv2hfRDjDlJmaQXuS8Rtv9GnRWyC9JBu7XmGvGDziumnJH7Hyzh3VNu-kSPQD3vuAFgMZS6uUzOztCkT0fpOalZI6hqxtWLvXUMj-crXrn-Maavz8qRhpAyp5kcYk3jiHGgQIi7QSK2JIdRJ8APyX9HlmTN5AQ",
    18    "e": "AQAB"
    19  }`
    20  
    21  func TestAcmeIdentifier(t *testing.T) {
    22  	tc := BoulderTypeConverter{}
    23  
    24  	ai := identifier.ACMEIdentifier{Type: "data1", Value: "data2"}
    25  	out := identifier.ACMEIdentifier{}
    26  
    27  	marshaledI, err := tc.ToDb(ai)
    28  	test.AssertNotError(t, err, "Could not ToDb")
    29  
    30  	scanner, ok := tc.FromDb(&out)
    31  	test.Assert(t, ok, "FromDb failed")
    32  	if !ok {
    33  		t.FailNow()
    34  		return
    35  	}
    36  
    37  	marshaled := marshaledI.(string)
    38  	err = scanner.Binder(&marshaled, &out)
    39  	test.AssertNotError(t, err, "failed to scanner.Binder")
    40  	test.AssertMarshaledEquals(t, ai, out)
    41  }
    42  
    43  func TestAcmeIdentifierBadJSON(t *testing.T) {
    44  	badJSON := `{`
    45  	tc := BoulderTypeConverter{}
    46  	out := identifier.ACMEIdentifier{}
    47  	scanner, _ := tc.FromDb(&out)
    48  	err := scanner.Binder(&badJSON, &out)
    49  	test.AssertError(t, err, "expected error from scanner.Binder")
    50  	var badJSONErr errBadJSON
    51  	test.AssertErrorWraps(t, err, &badJSONErr)
    52  	test.AssertEquals(t, string(badJSONErr.json), badJSON)
    53  }
    54  
    55  func TestJSONWebKey(t *testing.T) {
    56  	tc := BoulderTypeConverter{}
    57  
    58  	var jwk, out jose.JSONWebKey
    59  	err := json.Unmarshal([]byte(JWK1JSON), &jwk)
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  
    64  	marshaledI, err := tc.ToDb(jwk)
    65  	test.AssertNotError(t, err, "Could not ToDb")
    66  
    67  	scanner, ok := tc.FromDb(&out)
    68  	test.Assert(t, ok, "FromDb failed")
    69  	if !ok {
    70  		t.FailNow()
    71  		return
    72  	}
    73  
    74  	marshaled := marshaledI.(string)
    75  	err = scanner.Binder(&marshaled, &out)
    76  	test.AssertNotError(t, err, "failed to scanner.Binder")
    77  	test.AssertMarshaledEquals(t, jwk, out)
    78  }
    79  
    80  func TestJSONWebKeyBadJSON(t *testing.T) {
    81  	badJSON := `{`
    82  	tc := BoulderTypeConverter{}
    83  	out := jose.JSONWebKey{}
    84  	scanner, _ := tc.FromDb(&out)
    85  	err := scanner.Binder(&badJSON, &out)
    86  	test.AssertError(t, err, "expected error from scanner.Binder")
    87  	var badJSONErr errBadJSON
    88  	test.AssertErrorWraps(t, err, &badJSONErr)
    89  	test.AssertEquals(t, string(badJSONErr.json), badJSON)
    90  }
    91  
    92  func TestAcmeStatus(t *testing.T) {
    93  	tc := BoulderTypeConverter{}
    94  
    95  	var as, out core.AcmeStatus
    96  	as = "core.AcmeStatus"
    97  
    98  	marshaledI, err := tc.ToDb(as)
    99  	test.AssertNotError(t, err, "Could not ToDb")
   100  
   101  	scanner, ok := tc.FromDb(&out)
   102  	test.Assert(t, ok, "FromDb failed")
   103  	if !ok {
   104  		t.FailNow()
   105  		return
   106  	}
   107  
   108  	marshaled := marshaledI.(string)
   109  	err = scanner.Binder(&marshaled, &out)
   110  	test.AssertNotError(t, err, "failed to scanner.Binder")
   111  	test.AssertMarshaledEquals(t, as, out)
   112  }
   113  
   114  func TestOCSPStatus(t *testing.T) {
   115  	tc := BoulderTypeConverter{}
   116  
   117  	var os, out core.OCSPStatus
   118  	os = "core.OCSPStatus"
   119  
   120  	marshaledI, err := tc.ToDb(os)
   121  	test.AssertNotError(t, err, "Could not ToDb")
   122  
   123  	scanner, ok := tc.FromDb(&out)
   124  	test.Assert(t, ok, "FromDb failed")
   125  	if !ok {
   126  		t.FailNow()
   127  		return
   128  	}
   129  
   130  	marshaled := marshaledI.(string)
   131  	err = scanner.Binder(&marshaled, &out)
   132  	test.AssertNotError(t, err, "failed to scanner.Binder")
   133  	test.AssertMarshaledEquals(t, os, out)
   134  }
   135  
   136  func TestStringSlice(t *testing.T) {
   137  	tc := BoulderTypeConverter{}
   138  	var au, out []string
   139  
   140  	marshaledI, err := tc.ToDb(au)
   141  	test.AssertNotError(t, err, "Could not ToDb")
   142  
   143  	scanner, ok := tc.FromDb(&out)
   144  	test.Assert(t, ok, "FromDb failed")
   145  	if !ok {
   146  		t.FailNow()
   147  		return
   148  	}
   149  
   150  	marshaled := marshaledI.(string)
   151  	err = scanner.Binder(&marshaled, &out)
   152  	test.AssertNotError(t, err, "failed to scanner.Binder")
   153  	test.AssertMarshaledEquals(t, au, out)
   154  }
   155  
   156  func TestTimeTruncate(t *testing.T) {
   157  	tc := BoulderTypeConverter{}
   158  	preciseTime := time.Date(2024, 06, 20, 00, 00, 00, 999999999, time.UTC)
   159  	dbTime, err := tc.ToDb(preciseTime)
   160  	test.AssertNotError(t, err, "Could not ToDb")
   161  	dbTimeT, ok := dbTime.(time.Time)
   162  	test.Assert(t, ok, "Could not convert dbTime to time.Time")
   163  	test.Assert(t, dbTimeT.Nanosecond() == 0, "Nanosecond not truncated")
   164  
   165  	dbTimePtr, err := tc.ToDb(&preciseTime)
   166  	test.AssertNotError(t, err, "Could not ToDb")
   167  	dbTimePtrT, ok := dbTimePtr.(*time.Time)
   168  	test.Assert(t, ok, "Could not convert dbTimePtr to *time.Time")
   169  	test.Assert(t, dbTimePtrT.Nanosecond() == 0, "Nanosecond not truncated")
   170  
   171  	var dbTimePtrNil *time.Time
   172  	shouldBeNil, err := tc.ToDb(dbTimePtrNil)
   173  	test.AssertNotError(t, err, "Could not ToDb")
   174  	if shouldBeNil != nil {
   175  		t.Errorf("Expected nil, got %v", shouldBeNil)
   176  	}
   177  }