1+ var expect = require ( 'chai' ) . expect ;
2+ const kmsScheduledDeletion = require ( './kmsScheduledDeletion' ) ;
3+
4+ const listKeys = [
5+ {
6+ KeyId : '60c4f21b-e271-4e97-86ae-6403618a9467' ,
7+ KeyArn : 'arn:aws:kms:us-east-1:112233445566:key/60c4f21b-e271-4e97-86ae-6403618a9467'
8+ }
9+ ] ;
10+
11+ const describeKey = [
12+ {
13+ KeyMetadata : {
14+ AWSAccountId : "111122223333" ,
15+ Arn : "arn:aws:kms:us-east-1:111122223333:key/60c4f21b-e271-4e97-86ae-6403618a9467" ,
16+ CreationDate : "2020-08-26T16:55:28+00:00" ,
17+ CustomerMasterKeySpec : "SYMMETRIC_DEFAULT" ,
18+ Description : "" ,
19+ Enabled : true ,
20+ EncryptionAlgorithms : [
21+ "SYMMETRIC_DEFAULT"
22+ ] ,
23+ KeyId : "60c4f21b-e271-4e97-86ae-6403618a9467" ,
24+ KeyManager : "CUSTOMER" ,
25+ KeyState : "PendingDeletion" ,
26+ KeyUsage : "ENCRYPT_DECRYPT" ,
27+ MultiRegion : false ,
28+ Origin : "AWS_KMS"
29+ }
30+ } ,
31+ {
32+ KeyMetadata : {
33+ AWSAccountId : "111122223333" ,
34+ Arn : "arn:aws:kms:us-east-1:111122223333:key/60c4f21b-e271-4e97-86ae-6403618a9467" ,
35+ CreationDate : "2020-08-26T16:55:28+00:00" ,
36+ CustomerMasterKeySpec : "SYMMETRIC_DEFAULT" ,
37+ Description : "" ,
38+ Enabled : true ,
39+ EncryptionAlgorithms : [
40+ "SYMMETRIC_DEFAULT"
41+ ] ,
42+ KeyId : "60c4f21b-e271-4e97-86ae-6403618a9467" ,
43+ KeyManager : "CUSTOMER" ,
44+ KeyState : "Enabled" ,
45+ KeyUsage : "ENCRYPT_DECRYPT" ,
46+ MultiRegion : false ,
47+ Origin : "AWS_KMS"
48+ }
49+ } ,
50+ ]
51+
52+ const createCache = ( keys , describeKeys ) => {
53+ var keyId = ( keys && keys . length ) ? keys [ 0 ] . KeyId : null ;
54+ return {
55+ kms :{
56+ listKeys : {
57+ 'us-east-1' : {
58+ data : keys
59+ } ,
60+ } ,
61+ describeKey : {
62+ 'us-east-1' : {
63+ [ keyId ] : {
64+ data : describeKeys
65+ } ,
66+ } ,
67+ } ,
68+ } ,
69+ } ;
70+ } ;
71+
72+ const createErrorCache = ( ) => {
73+ return {
74+ kms : {
75+ listKeys : {
76+ 'us-east-1' : {
77+ err : {
78+ message : 'error listing kms keys'
79+ } ,
80+ } ,
81+ } ,
82+ describeKey : {
83+ 'us-east-1' : {
84+ err : {
85+ message : 'error listing kms key resources'
86+ } ,
87+ } ,
88+ } ,
89+ } ,
90+ } ;
91+ } ;
92+
93+ const createNullCache = ( ) => {
94+ return {
95+ kms : {
96+ listKeys : {
97+ 'us-east-1' : null ,
98+ } ,
99+ describeKey : {
100+ 'us-east-1' : null
101+ } ,
102+ } ,
103+ } ;
104+ } ;
105+
106+ describe ( 'kmsScheduledDeletion' , function ( ) {
107+ describe ( 'run' , function ( ) {
108+ it ( 'should WARN if Key is scheduled for deletion' , function ( done ) {
109+ const cache = createCache ( [ listKeys [ 0 ] ] , describeKey [ 0 ] ) ;
110+ kmsScheduledDeletion . run ( cache , { } , ( err , results ) => {
111+ expect ( results . length ) . to . equal ( 1 ) ;
112+ expect ( results [ 0 ] . status ) . to . equal ( 1 ) ;
113+ expect ( results [ 0 ] . message ) . to . include ( 'Key is scheduled for deletion' ) ;
114+ expect ( results [ 0 ] . region ) . to . equal ( 'us-east-1' ) ;
115+ done ( ) ;
116+ } ) ;
117+ } ) ;
118+
119+ it ( 'should PASS if Key is not scheduled for deletion' , function ( done ) {
120+ const cache = createCache ( [ listKeys [ 0 ] ] , describeKey [ 1 ] ) ;
121+ kmsScheduledDeletion . run ( cache , { } , ( err , results ) => {
122+ expect ( results . length ) . to . equal ( 1 ) ;
123+ expect ( results [ 0 ] . status ) . to . equal ( 0 ) ;
124+ expect ( results [ 0 ] . message ) . to . include ( 'Key is not scheduled for deletion' ) ;
125+ expect ( results [ 0 ] . region ) . to . equal ( 'us-east-1' ) ;
126+ done ( ) ;
127+ } ) ;
128+ } ) ;
129+
130+ it ( 'should PASS if no KMS keys found' , function ( done ) {
131+ const cache = createCache ( [ ] , describeKey [ 0 ] ) ;
132+ kmsScheduledDeletion . run ( cache , { } , ( err , results ) => {
133+ expect ( results . length ) . to . equal ( 1 ) ;
134+ expect ( results [ 0 ] . status ) . to . equal ( 0 ) ;
135+ expect ( results [ 0 ] . message ) . to . include ( 'No KMS keys found' ) ;
136+ expect ( results [ 0 ] . region ) . to . equal ( 'us-east-1' ) ;
137+ done ( ) ;
138+ } ) ;
139+ } ) ;
140+
141+ it ( 'should UNKNOWN if unable to list KMS keys' , function ( done ) {
142+ const cache = createErrorCache ( ) ;
143+ kmsScheduledDeletion . run ( cache , { } , ( err , results ) => {
144+ expect ( results . length ) . to . equal ( 1 ) ;
145+ expect ( results [ 0 ] . status ) . to . equal ( 3 ) ;
146+ expect ( results [ 0 ] . message ) . to . include ( 'Unable to list KMS keys' ) ;
147+ expect ( results [ 0 ] . region ) . to . equal ( 'us-east-1' ) ;
148+ done ( ) ;
149+ } ) ;
150+ } ) ;
151+
152+ it ( 'should not return any result if list keys response is not found' , function ( done ) {
153+ const cache = createNullCache ( ) ;
154+ kmsScheduledDeletion . run ( cache , { } , ( err , results ) => {
155+ expect ( results . length ) . to . equal ( 0 ) ;
156+ done ( ) ;
157+ } ) ;
158+ } ) ;
159+ } ) ;
160+ } ) ;
0 commit comments