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