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  }