gitee.com/zhaochuninhefei/fabric-ca-gm@v0.0.2/lib/server/certificaterequest/certificaterequest_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package certificaterequest 8 9 import ( 10 // "bytes" 11 "errors" 12 "testing" 13 "time" 14 15 "gitee.com/zhaochuninhefei/fabric-ca-gm/internal/pkg/api" 16 "gitee.com/zhaochuninhefei/fabric-ca-gm/internal/pkg/util" 17 "gitee.com/zhaochuninhefei/fabric-ca-gm/lib/server/certificaterequest/mocks" 18 "github.com/stretchr/testify/assert" 19 ) 20 21 func TestCertificateRequest(t *testing.T) { 22 ctx := new(mocks.RequestContext) 23 ctx.On("GetQueryParm", "id").Return("testid") 24 ctx.On("GetQueryParm", "aki").Return("123456") 25 ctx.On("GetQueryParm", "serial").Return("1234") 26 ctx.On("GetBoolQueryParm", "notrevoked").Return(false, nil) 27 ctx.On("GetBoolQueryParm", "notexpired").Return(false, nil) 28 ctx.On("GetQueryParm", "ca").Return("ca1") 29 ctx.On("GetQueryParm", "revoked_start").Return("2001-01-01") 30 ctx.On("GetQueryParm", "revoked_end").Return("2012-12-12") 31 ctx.On("GetQueryParm", "expired_start").Return("2002-02-01") 32 ctx.On("GetQueryParm", "expired_end").Return("2011-11-11") 33 34 certReq, err := NewCertificateRequest(ctx) 35 assert.NoError(t, err, "failed to get certificate request") 36 37 assert.Equal(t, "testid", certReq.GetID()) 38 assert.Equal(t, "123456", certReq.GetAKI()) 39 assert.Equal(t, "1234", certReq.GetSerial()) 40 assert.Equal(t, false, certReq.GetNotRevoked()) 41 assert.Equal(t, false, certReq.GetNotExpired()) 42 assert.Equal(t, "2001-01-01 00:00:00 +0000 UTC", certReq.GetRevokedTimeStart().String()) 43 assert.Equal(t, "2012-12-12 00:00:00 +0000 UTC", certReq.GetRevokedTimeEnd().String()) 44 assert.Equal(t, "2002-02-01 00:00:00 +0000 UTC", certReq.GetExpiredTimeStart().String()) 45 assert.Equal(t, "2011-11-11 00:00:00 +0000 UTC", certReq.GetExpiredTimeEnd().String()) 46 } 47 48 func TestGetReq(t *testing.T) { 49 ctx := new(mocks.RequestContext) 50 ctx.On("GetQueryParm", "id").Return("testid") 51 ctx.On("GetQueryParm", "aki").Return("123456") 52 ctx.On("GetQueryParm", "serial").Return("1234") 53 ctx.On("GetBoolQueryParm", "notrevoked").Return(false, nil) 54 ctx.On("GetBoolQueryParm", "notexpired").Return(true, nil) 55 ctx.On("GetQueryParm", "ca").Return("ca1") 56 57 certReq, err := getReq(ctx) 58 assert.NoError(t, err, "Failed to get certificate request") 59 assert.NotNil(t, certReq, "Failed to get certificate request") 60 assert.Equal(t, "testid", certReq.ID) 61 assert.Equal(t, "123456", certReq.AKI) 62 assert.Equal(t, "1234", certReq.Serial) 63 assert.Equal(t, false, certReq.NotRevoked) 64 assert.Equal(t, true, certReq.NotExpired) 65 66 ctx = new(mocks.RequestContext) 67 ctx.On("GetQueryParm", "id").Return("testid") 68 ctx.On("GetQueryParm", "aki").Return("123456") 69 ctx.On("GetQueryParm", "serial").Return("1234") 70 ctx.On("GetBoolQueryParm", "notrevoked").Return(false, nil) 71 ctx.On("GetQueryParm", "ca").Return("ca1") 72 ctx.On("GetBoolQueryParm", "notexpired").Return(true, errors.New("failed to parse bool value")) 73 certReq, err = getReq(ctx) 74 util.ErrorContains(t, err, "failed to parse bool value", "should fail") 75 76 ctx = new(mocks.RequestContext) 77 ctx.On("GetQueryParm", "id").Return("testid") 78 ctx.On("GetQueryParm", "aki").Return("123456") 79 ctx.On("GetQueryParm", "serial").Return("1234") 80 ctx.On("GetBoolQueryParm", "notexpired").Return(false, nil) 81 ctx.On("GetQueryParm", "ca").Return("ca1") 82 ctx.On("GetBoolQueryParm", "notrevoked").Return(true, errors.New("failed to parse bool value")) 83 certReq, err = getReq(ctx) 84 util.ErrorContains(t, err, "failed to parse bool value", "should fail") 85 } 86 87 func TestGetTimes(t *testing.T) { 88 ctx := new(mocks.RequestContext) 89 ctx.On("GetQueryParm", "revoked_start").Return("2001-01-01") 90 ctx.On("GetQueryParm", "revoked_end").Return("2012-12-12") 91 ctx.On("GetQueryParm", "expired_start").Return("2002-02-01") 92 ctx.On("GetQueryParm", "expired_end").Return("2011-11-11") 93 times, err := getTimes(ctx) 94 assert.NoError(t, err, "Failed to get times from certificate request") 95 assert.Equal(t, "2001-01-01 00:00:00 +0000 UTC", times.revokedStart.String()) 96 assert.Equal(t, "2012-12-12 00:00:00 +0000 UTC", times.revokedEnd.String()) 97 assert.Equal(t, "2002-02-01 00:00:00 +0000 UTC", times.expiredStart.String()) 98 assert.Equal(t, "2011-11-11 00:00:00 +0000 UTC", times.expiredEnd.String()) 99 100 ctx = new(mocks.RequestContext) 101 ctx.On("GetQueryParm", "revoked_start").Return("2001-01") 102 ctx.On("GetQueryParm", "revoked_end").Return("2012-12-12") 103 ctx.On("GetQueryParm", "expired_start").Return("2002-02-01") 104 ctx.On("GetQueryParm", "expired_end").Return("2011-11-11") 105 times, err = getTimes(ctx) 106 assert.Error(t, err, "Invalid time format, should have failed") 107 108 ctx = new(mocks.RequestContext) 109 ctx.On("GetQueryParm", "revoked_start").Return("2001-01-01") 110 ctx.On("GetQueryParm", "revoked_end").Return("2012-12-123") 111 ctx.On("GetQueryParm", "expired_start").Return("2002-02-01") 112 ctx.On("GetQueryParm", "expired_end").Return("2011-11-11") 113 times, err = getTimes(ctx) 114 assert.Error(t, err, "Invalid time format, should have failed") 115 116 ctx = new(mocks.RequestContext) 117 ctx.On("GetQueryParm", "revoked_start").Return("2001-01-01") 118 ctx.On("GetQueryParm", "revoked_end").Return("2012-12-12") 119 ctx.On("GetQueryParm", "expired_start").Return("20023-02-01") 120 ctx.On("GetQueryParm", "expired_end").Return("2011-11-11") 121 times, err = getTimes(ctx) 122 assert.Error(t, err, "Invalid time format, should have failed") 123 124 ctx = new(mocks.RequestContext) 125 ctx.On("GetQueryParm", "revoked_start").Return("2001-01-01") 126 ctx.On("GetQueryParm", "revoked_end").Return("2012-12-12") 127 ctx.On("GetQueryParm", "expired_start").Return("2002-02-01") 128 ctx.On("GetQueryParm", "expired_end").Return("2011-111-11") 129 times, err = getTimes(ctx) 130 assert.Error(t, err, "Invalid time format, should have failed") 131 } 132 133 func TestValidateReq(t *testing.T) { 134 req := &api.GetCertificatesRequest{ 135 NotExpired: true, 136 } 137 times := &TimeFilters{ 138 expiredStart: &time.Time{}, 139 } 140 err := validateReq(req, times) 141 t.Log("Error: ", err) 142 assert.Error(t, err, "Should have failed, both 'notexpire' and expiredStart are set") 143 144 req = &api.GetCertificatesRequest{ 145 NotExpired: true, 146 } 147 times = &TimeFilters{ 148 expiredEnd: &time.Time{}, 149 } 150 err = validateReq(req, times) 151 t.Log("Error: ", err) 152 assert.Error(t, err, "Should have failed, both 'notexpire' and expiredEnd are set") 153 154 req = &api.GetCertificatesRequest{ 155 NotRevoked: true, 156 } 157 times = &TimeFilters{ 158 revokedStart: &time.Time{}, 159 } 160 err = validateReq(req, times) 161 t.Log("Error: ", err) 162 assert.Error(t, err, "Should have failed, both 'notexpire' and revokedStart are set") 163 164 req = &api.GetCertificatesRequest{ 165 NotRevoked: true, 166 } 167 times = &TimeFilters{ 168 revokedEnd: &time.Time{}, 169 } 170 err = validateReq(req, times) 171 t.Log("Error: ", err) 172 assert.Error(t, err, "Should have failed, both 'notexpire' and revokedEnd are set") 173 174 req = &api.GetCertificatesRequest{} 175 err = validateReq(req, times) 176 assert.NoError(t, err, "Should not have returned an error, failed to validated request") 177 } 178 179 func TestGetTime(t *testing.T) { 180 _, err := getTime("") 181 assert.NoError(t, err, "Failed parse time input") 182 183 _, err = getTime("2018-01-01") 184 assert.NoError(t, err, "Failed parse time input") 185 186 _, err = getTime("+30D") 187 assert.NoError(t, err, "Failed parse time input") 188 189 _, err = getTime("+30s") 190 assert.NoError(t, err, "Failed parse time input") 191 192 _, err = getTime("2018-01-01T") 193 assert.Error(t, err, "Should fail, incomplete time string") 194 195 _, err = getTime("+30y") 196 assert.Error(t, err, "Should fail, 'y' year duration not supported") 197 198 _, err = getTime("30h") 199 assert.Error(t, err, "Should fail, +/- required for duration") 200 201 _, err = getTime("++30h") 202 assert.Error(t, err, "Should fail, two plus '+' signs") 203 } 204 205 func TestConvertDayToHours(t *testing.T) { 206 timeHours, err := convertDayToHours("+20d") 207 assert.NoError(t, err, "Failed to convert days to hours") 208 assert.Equal(t, "+480h", timeHours) 209 210 _, err = convertDayToHours("d") 211 assert.Error(t, err, "Should fail, not a valid number") 212 }