19
19
import static org .hamcrest .Matchers .not ;
20
20
import static org .junit .Assert .assertThat ;
21
21
22
+ import java .time .Duration ;
22
23
import java .util .Collections ;
23
24
import java .util .List ;
24
25
import org .junit .After ;
25
26
import org .junit .Before ;
26
27
import org .junit .Test ;
27
28
import software .amazon .awssdk .core .auth .StaticCredentialsProvider ;
28
29
import software .amazon .awssdk .core .regions .Region ;
29
- import software .amazon .awssdk .core .waiters .WaiterParameters ;
30
30
import software .amazon .awssdk .services .cloudformation .model .CreateStackRequest ;
31
31
import software .amazon .awssdk .services .cloudformation .model .DeleteStackRequest ;
32
32
import software .amazon .awssdk .services .cloudformation .model .DescribeStacksRequest ;
33
+ import software .amazon .awssdk .services .cloudformation .model .StackStatus ;
33
34
import software .amazon .awssdk .services .cloudformation .model .Tag ;
34
35
import software .amazon .awssdk .services .cloudformation .model .UpdateStackRequest ;
35
- import software .amazon .awssdk .services . cloudformation . waiters . CloudFormationClientWaiters ;
36
+ import software .amazon .awssdk .testutils . Waiter ;
36
37
import software .amazon .awssdk .testutils .service .AwsIntegrationTestBase ;
37
38
38
39
/**
@@ -62,7 +63,6 @@ public class SendEmptyListIntegrationTest extends AwsIntegrationTestBase {
62
63
"}" ;
63
64
64
65
private CloudFormationClient cf ;
65
- private CloudFormationClientWaiters waiters ;
66
66
private String stackName ;
67
67
68
68
@ Before
@@ -78,10 +78,7 @@ public void setup() {
78
78
.templateBody (STARTING_TEMPLATE )
79
79
.tags (Tag .builder ().key ("FooKey" ).value ("FooValue" ).build ()).build ());
80
80
81
- waiters = new CloudFormationClientWaiters (cf );
82
-
83
- waiters .stackCreateComplete ()
84
- .run (getWaiterParameters (stackName ));
81
+ waitUntilComplete (StackStatus .CREATE_COMPLETE );
85
82
}
86
83
87
84
@ After
@@ -96,8 +93,8 @@ public void explicitlyEmptyTagList_RemovesTagsFromStack() {
96
93
.stackName (stackName )
97
94
.templateBody (STARTING_TEMPLATE )
98
95
.tags (Collections .emptyList ()).build ());
99
- waiters . stackUpdateComplete ()
100
- . run ( getWaiterParameters ( stackName ) );
96
+
97
+ waitUntilComplete ( StackStatus . UPDATE_COMPLETE );
101
98
assertThat (getTagsForStack (stackName ), empty ());
102
99
}
103
100
@@ -107,20 +104,22 @@ public void autoConstructedEmptyTagList_DoesNotRemoveTagsFromStack() {
107
104
cf .updateStack (UpdateStackRequest .builder ()
108
105
.stackName (stackName )
109
106
.templateBody (UPDATED_TEMPLATE ).build ());
110
- waiters . stackUpdateComplete ()
111
- . run ( getWaiterParameters ( stackName ) );
107
+
108
+ waitUntilComplete ( StackStatus . UPDATE_COMPLETE );
112
109
assertThat (getTagsForStack (stackName ), not (empty ()));
113
110
}
114
111
112
+ private void waitUntilComplete (StackStatus expectedStatus ) {
113
+ Waiter .run (() -> cf .describeStacks (r -> r .stackName (stackName )))
114
+ .until (r -> r .stacks ().size () == 1 && r .stacks ().get (0 ).stackStatus () == expectedStatus )
115
+ .failOn (r -> r .stacks ().size () == 1 && r .stacks ().get (0 ).stackStatus () == StackStatus .ROLLBACK_IN_PROGRESS )
116
+ .orFailAfter (Duration .ofMinutes (2 ));
117
+ }
118
+
115
119
private List <Tag > getTagsForStack (String stackName ) {
116
120
return cf .describeStacks (
117
121
DescribeStacksRequest .builder ().stackName (stackName ).build ())
118
122
.stacks ().get (0 )
119
123
.tags ();
120
124
}
121
-
122
- private WaiterParameters <DescribeStacksRequest > getWaiterParameters (String stackName ) {
123
- return new WaiterParameters <>(
124
- DescribeStacksRequest .builder ().stackName (stackName ).build ());
125
- }
126
125
}
0 commit comments