@@ -30,36 +30,140 @@ module VCAP::CloudController
3030 let ( :status_value ) { DeploymentModel ::ACTIVE_STATUS_VALUE }
3131 let ( :status_reason ) { DeploymentModel ::DEPLOYING_STATUS_REASON }
3232
33- it 'sets the deployments status to DEPLOYING' do
34- expect ( deployment . state ) . not_to eq ( DeploymentModel ::DEPLOYING_STATE )
33+ context 'there are no steps defined' do
34+ it 'sets the deployments status to DEPLOYING' do
35+ expect ( deployment . state ) . not_to eq ( DeploymentModel ::DEPLOYING_STATE )
3536
36- DeploymentContinue . continue ( deployment :, user_audit_info :)
37- deployment . reload
37+ DeploymentContinue . continue ( deployment :, user_audit_info :)
38+ deployment . reload
39+
40+ expect ( deployment . state ) . to eq ( DeploymentModel ::DEPLOYING_STATE )
41+ expect ( deployment . status_value ) . to eq ( DeploymentModel ::ACTIVE_STATUS_VALUE )
42+ expect ( deployment . status_reason ) . to eq ( DeploymentModel ::DEPLOYING_STATUS_REASON )
43+ end
44+
45+ it 'records an audit event for the continue deployment' do
46+ DeploymentContinue . continue ( deployment :, user_audit_info :)
47+
48+ event = VCAP ::CloudController ::Event . find ( type : 'audit.app.deployment.continue' )
49+ expect ( event ) . not_to be_nil
50+ expect ( event . actor ) . to eq ( '1234' )
51+ expect ( event . actor_type ) . to eq ( 'user' )
52+ expect ( event . actor_name ) . to eq ( '[email protected] ' ) 53+ expect ( event . actor_username ) . to eq ( 'eric' )
54+ expect ( event . actee ) . to eq ( app . guid )
55+ expect ( event . actee_type ) . to eq ( 'app' )
56+ expect ( event . actee_name ) . to eq ( app . name )
57+ expect ( event . timestamp ) . to be
58+ expect ( event . space_guid ) . to eq ( app . space_guid )
59+ expect ( event . organization_guid ) . to eq ( app . space . organization . guid )
60+ expect ( event . metadata ) . to eq ( {
61+ 'droplet_guid' => droplet . guid ,
62+ 'deployment_guid' => deployment . guid
63+ } )
64+ end
65+ end
66+
67+ context 'and there are no remaining steps' do
68+ let! ( :deployment ) do
69+ VCAP ::CloudController ::DeploymentModel . make (
70+ state : state ,
71+ status_value : status_value ,
72+ status_reason : status_reason ,
73+ droplet : droplet ,
74+ app : original_web_process . app ,
75+ deploying_web_process : deploying_web_process ,
76+ canary_current_step : 2
77+ )
78+ end
79+
80+ it 'sets the deployments status to DEPLOYING' do
81+ expect ( deployment . state ) . not_to eq ( DeploymentModel ::DEPLOYING_STATE )
82+
83+ DeploymentContinue . continue ( deployment :, user_audit_info :)
84+ deployment . reload
85+
86+ expect ( deployment . state ) . to eq ( DeploymentModel ::DEPLOYING_STATE )
87+ expect ( deployment . status_value ) . to eq ( DeploymentModel ::ACTIVE_STATUS_VALUE )
88+ expect ( deployment . status_reason ) . to eq ( DeploymentModel ::DEPLOYING_STATUS_REASON )
89+ end
90+
91+ it 'records an audit event for the continue deployment' do
92+ DeploymentContinue . continue ( deployment :, user_audit_info :)
3893
39- expect ( deployment . state ) . to eq ( DeploymentModel ::DEPLOYING_STATE )
40- expect ( deployment . status_value ) . to eq ( DeploymentModel ::ACTIVE_STATUS_VALUE )
41- expect ( deployment . status_reason ) . to eq ( DeploymentModel ::DEPLOYING_STATUS_REASON )
94+ event = VCAP ::CloudController ::Event . find ( type : 'audit.app.deployment.continue' )
95+ expect ( event ) . not_to be_nil
96+ expect ( event . actor ) . to eq ( '1234' )
97+ expect ( event . actor_type ) . to eq ( 'user' )
98+ expect ( event . actor_name ) . to eq ( '[email protected] ' ) 99+ expect ( event . actor_username ) . to eq ( 'eric' )
100+ expect ( event . actee ) . to eq ( app . guid )
101+ expect ( event . actee_type ) . to eq ( 'app' )
102+ expect ( event . actee_name ) . to eq ( app . name )
103+ expect ( event . timestamp ) . to be
104+ expect ( event . space_guid ) . to eq ( app . space_guid )
105+ expect ( event . organization_guid ) . to eq ( app . space . organization . guid )
106+ expect ( event . metadata ) . to eq ( {
107+ 'droplet_guid' => droplet . guid ,
108+ 'deployment_guid' => deployment . guid
109+ } )
110+ end
42111 end
43112
44- it 'records an audit event for the continue deployment' do
45- DeploymentContinue . continue ( deployment :, user_audit_info :)
46-
47- event = VCAP ::CloudController ::Event . find ( type : 'audit.app.deployment.continue' )
48- expect ( event ) . not_to be_nil
49- expect ( event . actor ) . to eq ( '1234' )
50- expect ( event . actor_type ) . to eq ( 'user' )
51- expect ( event . actor_name ) . to eq ( '[email protected] ' ) 52- expect ( event . actor_username ) . to eq ( 'eric' )
53- expect ( event . actee ) . to eq ( app . guid )
54- expect ( event . actee_type ) . to eq ( 'app' )
55- expect ( event . actee_name ) . to eq ( app . name )
56- expect ( event . timestamp ) . to be
57- expect ( event . space_guid ) . to eq ( app . space_guid )
58- expect ( event . organization_guid ) . to eq ( app . space . organization . guid )
59- expect ( event . metadata ) . to eq ( {
60- 'droplet_guid' => droplet . guid ,
61- 'deployment_guid' => deployment . guid
62- } )
113+ context 'and there are remaining steps' do
114+ let! ( :deployment ) do
115+ VCAP ::CloudController ::DeploymentModel . make (
116+ state : state ,
117+ status_value : status_value ,
118+ status_reason : status_reason ,
119+ droplet : droplet ,
120+ app : original_web_process . app ,
121+ deploying_web_process : deploying_web_process ,
122+ canary_current_step : 1 ,
123+ canary_steps : [ { 'instance_weight' => 10 } , { 'instance_weight' => 40 } ]
124+ )
125+ end
126+
127+ it 'sets the deployments status to PREPAUSED' do
128+ expect ( deployment . state ) . not_to eq ( DeploymentModel ::DEPLOYING_STATE )
129+
130+ DeploymentContinue . continue ( deployment :, user_audit_info :)
131+ deployment . reload
132+
133+ expect ( deployment . state ) . to eq ( DeploymentModel ::PREPAUSED_STATE )
134+ expect ( deployment . status_value ) . to eq ( DeploymentModel ::ACTIVE_STATUS_VALUE )
135+ expect ( deployment . status_reason ) . to eq ( DeploymentModel ::DEPLOYING_STATUS_REASON )
136+ end
137+
138+ it 'increments the current canary step' do
139+ expect ( deployment . state ) . not_to eq ( DeploymentModel ::DEPLOYING_STATE )
140+
141+ DeploymentContinue . continue ( deployment :, user_audit_info :)
142+ deployment . reload
143+
144+ expect ( deployment . canary_current_step ) . to eq ( 2 )
145+ end
146+
147+ it 'records an audit event for the continue deployment' do
148+ DeploymentContinue . continue ( deployment :, user_audit_info :)
149+
150+ event = VCAP ::CloudController ::Event . find ( type : 'audit.app.deployment.continue' )
151+ expect ( event ) . not_to be_nil
152+ expect ( event . actor ) . to eq ( '1234' )
153+ expect ( event . actor_type ) . to eq ( 'user' )
154+ expect ( event . actor_name ) . to eq ( '[email protected] ' ) 155+ expect ( event . actor_username ) . to eq ( 'eric' )
156+ expect ( event . actee ) . to eq ( app . guid )
157+ expect ( event . actee_type ) . to eq ( 'app' )
158+ expect ( event . actee_name ) . to eq ( app . name )
159+ expect ( event . timestamp ) . to be
160+ expect ( event . space_guid ) . to eq ( app . space_guid )
161+ expect ( event . organization_guid ) . to eq ( app . space . organization . guid )
162+ expect ( event . metadata ) . to eq ( {
163+ 'droplet_guid' => droplet . guid ,
164+ 'deployment_guid' => deployment . guid
165+ } )
166+ end
63167 end
64168 end
65169
0 commit comments