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  }