11package premium
22
33import (
4+ "os"
5+ "path/filepath"
46 "testing"
57 "time"
68
9+ "github.com/cloudquery/plugin-sdk/v4/plugin"
10+ "github.com/rs/zerolog"
711 "github.com/stretchr/testify/require"
812)
913
@@ -25,3 +29,101 @@ func TestUnpackLicense(t *testing.T) {
2529 require .Nil (t , l )
2630 })
2731}
32+
33+ func TestValidateLicense (t * testing.T ) {
34+ publicKey = "eacdff4866c8bc0d97de3c2d7668d0970c61aa16c3f12d6ba8083147ff92c9a6"
35+ licData := `{"license":"eyJsaWNlbnNlZF90byI6IlVOTElDRU5TRUQgVEVTVCIsImlzc3VlZF9hdCI6IjIwMjMtMTItMjhUMTk6MDI6MjguODM4MzY3WiIsInZhbGlkX2Zyb20iOiIyMDIzLTEyLTI4VDE5OjAyOjI4LjgzODM2N1oiLCJleHBpcmVzX2F0IjoiMjAyMy0xMi0yOVQxOTowMjoyOC44MzgzNjdaIn0=","signature":"8687a858463764b052455b3c783d979d364b5fb653b86d88a7463e495480db62fdec7ae1a84d1e30dddee77eb769a0e498ecfc836538c53e410aeb1a0c04d102"}`
36+ validTime := time .Date (2023 , 12 , 29 , 12 , 0 , 0 , 0 , time .UTC )
37+ expiredTime := time .Date (2024 , 1 , 1 , 12 , 0 , 0 , 0 , time .UTC )
38+ nopMeta := plugin.Meta {Team : "cloudquery" , Kind : "source" , Name : "test" }
39+
40+ t .Run ("SingleFile" , func (t * testing.T ) {
41+ dir := t .TempDir ()
42+ f := filepath .Join (dir , "testlicense.cqlicense" )
43+ if err := os .WriteFile (f , []byte (licData ), 0644 ); err != nil {
44+ require .NoError (t , err )
45+ }
46+
47+ t .Run ("Expired" , licenseTest (f , nopMeta , expiredTime , ErrLicenseExpired ))
48+ t .Run ("Success" , licenseTest (f , nopMeta , validTime , nil ))
49+ })
50+ t .Run ("Dir" , func (t * testing.T ) {
51+ dir := t .TempDir ()
52+ f := filepath .Join (dir , "testlicense.cqlicense" )
53+ if err := os .WriteFile (f , []byte (licData ), 0644 ); err != nil {
54+ require .NoError (t , err )
55+ }
56+ t .Run ("Expired" , licenseTest (dir , nopMeta , expiredTime , ErrLicenseExpired ))
57+ t .Run ("Success" , licenseTest (dir , nopMeta , validTime , nil ))
58+ })
59+ }
60+
61+ func TestValidateSpecificLicense (t * testing.T ) {
62+ publicKey = `de452e6028fe488f56ee0dfcf5b387ee773f03d24de66f00c40ec5b17085c549`
63+ licData := `{"license":"eyJsaWNlbnNlZF90byI6IlVOTElDRU5TRUQgVEVTVCIsInBsdWdpbnMiOlsiY2xvdWRxdWVyeS9zb3VyY2UvdGVzdDEiLCJjbG91ZHF1ZXJ5L3NvdXJjZS90ZXN0MiJdLCJpc3N1ZWRfYXQiOiIyMDI0LTAxLTAyVDExOjEwOjA5LjE0OTYwNVoiLCJ2YWxpZF9mcm9tIjoiMjAyNC0wMS0wMlQxMToxMDowOS4xNDk2MDVaIiwiZXhwaXJlc19hdCI6IjIwMjQtMDEtMDNUMTE6MTA6MDkuMTQ5NjA1WiJ9","signature":"e5752577c2b2c5a8920b3277fd11504d9c6820e8acb22bc17ccda524857c1d9fc7534f39b9a122376069ad682a2b616a10d1cfae40a984fb57fee31f13a15302"}`
64+ validTime := time .Date (2024 , 1 , 2 , 12 , 0 , 0 , 0 , time .UTC )
65+ expiredTime := time .Date (2024 , 1 , 3 , 12 , 0 , 0 , 0 , time .UTC )
66+ invalidMeta := plugin.Meta {Team : "cloudquery" , Kind : "source" , Name : "test" }
67+ validMeta := plugin.Meta {Team : "cloudquery" , Kind : "source" , Name : "test1" }
68+
69+ t .Run ("SingleFile" , func (t * testing.T ) {
70+ dir := t .TempDir ()
71+ f := filepath .Join (dir , "testlicense.cqlicense" )
72+ if err := os .WriteFile (f , []byte (licData ), 0644 ); err != nil {
73+ require .NoError (t , err )
74+ }
75+
76+ t .Run ("Expired" , licenseTest (f , validMeta , expiredTime , ErrLicenseExpired ))
77+ t .Run ("Success" , licenseTest (f , validMeta , validTime , nil ))
78+ t .Run ("NotApplicable" , licenseTest (f , invalidMeta , validTime , ErrLicenseNotApplicable ))
79+ })
80+ t .Run ("SingleDir" , func (t * testing.T ) {
81+ dir := t .TempDir ()
82+ if err := os .WriteFile (filepath .Join (dir , "testlicense.cqlicense" ), []byte (licData ), 0644 ); err != nil {
83+ require .NoError (t , err )
84+ }
85+ t .Run ("Expired" , licenseTest (dir , validMeta , expiredTime , ErrLicenseExpired ))
86+ t .Run ("Success" , licenseTest (dir , validMeta , validTime , nil ))
87+ t .Run ("NotApplicable" , licenseTest (dir , invalidMeta , validTime , ErrLicenseNotApplicable ))
88+ })
89+ }
90+
91+ func TestValidateSpecificLicenseMultiFile (t * testing.T ) {
92+ publicKey = `de452e6028fe488f56ee0dfcf5b387ee773f03d24de66f00c40ec5b17085c549`
93+ licData1 := `{"license":"eyJsaWNlbnNlZF90byI6IlVOTElDRU5TRUQgVEVTVCIsInBsdWdpbnMiOlsiY2xvdWRxdWVyeS9zb3VyY2UvdGVzdDEiLCJjbG91ZHF1ZXJ5L3NvdXJjZS90ZXN0MiJdLCJpc3N1ZWRfYXQiOiIyMDI0LTAxLTAyVDExOjEwOjA5LjE0OTYwNVoiLCJ2YWxpZF9mcm9tIjoiMjAyNC0wMS0wMlQxMToxMDowOS4xNDk2MDVaIiwiZXhwaXJlc19hdCI6IjIwMjQtMDEtMDNUMTE6MTA6MDkuMTQ5NjA1WiJ9","signature":"e5752577c2b2c5a8920b3277fd11504d9c6820e8acb22bc17ccda524857c1d9fc7534f39b9a122376069ad682a2b616a10d1cfae40a984fb57fee31f13a15302"}`
94+ licData3 := `{"license":"eyJsaWNlbnNlZF90byI6IlVOTElDRU5TRUQgVEVTVDMiLCJwbHVnaW5zIjpbImNsb3VkcXVlcnkvc291cmNlL3Rlc3QzIl0sImlzc3VlZF9hdCI6IjIwMjQtMDEtMDJUMTE6MjA6NTcuMzE2NDE0WiIsInZhbGlkX2Zyb20iOiIyMDI0LTAxLTAyVDExOjIwOjU3LjMxNjQxNFoiLCJleHBpcmVzX2F0IjoiMjAyNC0wMS0wM1QxMToyMDo1Ny4zMTY0MTRaIn0=","signature":"9be752d46010af84ec7295ede29915950dab13d4eca3b82b5645f793b39a03a6eef6bc653bee26e2a4f148b4d0fd54df6401059fda6104bc207f6dec2127850f"}`
95+
96+ validTime := time .Date (2024 , 1 , 2 , 12 , 0 , 0 , 0 , time .UTC )
97+ expiredTime := time .Date (2024 , 1 , 3 , 12 , 0 , 0 , 0 , time .UTC )
98+ invalidMeta := plugin.Meta {Team : "cloudquery" , Kind : "source" , Name : "test" }
99+ validMeta1 := plugin.Meta {Team : "cloudquery" , Kind : "source" , Name : "test1" }
100+ validMeta3 := plugin.Meta {Team : "cloudquery" , Kind : "source" , Name : "test3" }
101+
102+ dir := t .TempDir ()
103+ if err := os .WriteFile (filepath .Join (dir , "testlicense1.cqlicense" ), []byte (licData1 ), 0644 ); err != nil {
104+ require .NoError (t , err )
105+ }
106+ if err := os .WriteFile (filepath .Join (dir , "testlicense3.cqlicense" ), []byte (licData3 ), 0644 ); err != nil {
107+ require .NoError (t , err )
108+ }
109+
110+ t .Run ("Expired" , licenseTest (dir , validMeta1 , expiredTime , ErrLicenseExpired ))
111+ t .Run ("Success" , licenseTest (dir , validMeta1 , validTime , nil ))
112+ t .Run ("SuccessOther" , licenseTest (dir , validMeta3 , validTime , nil ))
113+ t .Run ("NotApplicable" , licenseTest (dir , invalidMeta , validTime , ErrLicenseNotApplicable ))
114+ }
115+
116+ func licenseTest (inputPath string , meta plugin.Meta , timeIs time.Time , expectError error ) func (t * testing.T ) {
117+ return func (t * testing.T ) {
118+ timeFunc = func () time.Time {
119+ return timeIs
120+ }
121+
122+ err := ValidateLicense (zerolog .Nop (), meta , inputPath )
123+ if expectError == nil {
124+ require .NoError (t , err )
125+ } else {
126+ require .ErrorIs (t , err , expectError )
127+ }
128+ }
129+ }
0 commit comments