1+ package alias_test
2+
3+ import (
4+ "fmt"
5+ "testing"
6+
7+ "github.com/elastic/terraform-provider-elasticstack/internal/acctest"
8+ "github.com/elastic/terraform-provider-elasticstack/internal/clients"
9+ sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest"
10+ "github.com/hashicorp/terraform-plugin-testing/helper/resource"
11+ "github.com/hashicorp/terraform-plugin-testing/terraform"
12+ )
13+
14+ func TestAccResourceAlias (t * testing.T ) {
15+ // generate random names
16+ aliasName := sdkacctest .RandStringFromCharSet (22 , sdkacctest .CharSetAlpha )
17+ indexName := sdkacctest .RandStringFromCharSet (22 , sdkacctest .CharSetAlpha )
18+ indexName2 := sdkacctest .RandStringFromCharSet (22 , sdkacctest .CharSetAlpha )
19+
20+ resource .Test (t , resource.TestCase {
21+ PreCheck : func () { acctest .PreCheck (t ) },
22+ CheckDestroy : checkResourceAliasDestroy ,
23+ ProtoV6ProviderFactories : acctest .Providers ,
24+ Steps : []resource.TestStep {
25+ {
26+ Config : testAccResourceAliasCreate (aliasName , indexName ),
27+ Check : resource .ComposeTestCheckFunc (
28+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "name" , aliasName ),
29+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.#" , "1" ),
30+ resource .TestCheckTypeSetElemAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.*" , indexName ),
31+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "is_hidden" , "false" ),
32+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "is_write_index" , "false" ),
33+ ),
34+ },
35+ {
36+ Config : testAccResourceAliasUpdate (aliasName , indexName , indexName2 ),
37+ Check : resource .ComposeTestCheckFunc (
38+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "name" , aliasName ),
39+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.#" , "2" ),
40+ resource .TestCheckTypeSetElemAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.*" , indexName ),
41+ resource .TestCheckTypeSetElemAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.*" , indexName2 ),
42+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "is_write_index" , "true" ),
43+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "routing" , "test-routing" ),
44+ ),
45+ },
46+ {
47+ Config : testAccResourceAliasWithFilter (aliasName , indexName ),
48+ Check : resource .ComposeTestCheckFunc (
49+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "name" , aliasName ),
50+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.#" , "1" ),
51+ resource .TestCheckTypeSetElemAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.*" , indexName ),
52+ resource .TestCheckResourceAttrSet ("elasticstack_elasticsearch_alias.test_alias" , "filter" ),
53+ ),
54+ },
55+ },
56+ })
57+ }
58+
59+ func TestAccResourceAliasDataStream (t * testing.T ) {
60+ // generate random names
61+ aliasName := sdkacctest .RandStringFromCharSet (22 , sdkacctest .CharSetAlpha )
62+ dsName := sdkacctest .RandStringFromCharSet (22 , sdkacctest .CharSetAlpha )
63+
64+ resource .Test (t , resource.TestCase {
65+ PreCheck : func () { acctest .PreCheck (t ) },
66+ CheckDestroy : checkResourceAliasDestroy ,
67+ ProtoV6ProviderFactories : acctest .Providers ,
68+ Steps : []resource.TestStep {
69+ {
70+ Config : testAccResourceAliasDataStreamCreate (aliasName , dsName ),
71+ Check : resource .ComposeTestCheckFunc (
72+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "name" , aliasName ),
73+ resource .TestCheckResourceAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.#" , "1" ),
74+ resource .TestCheckTypeSetElemAttr ("elasticstack_elasticsearch_alias.test_alias" , "indices.*" , dsName ),
75+ ),
76+ },
77+ },
78+ })
79+ }
80+
81+ func testAccResourceAliasCreate (aliasName , indexName string ) string {
82+ return fmt .Sprintf (`
83+ resource "elasticstack_elasticsearch_index" "test_index" {
84+ name = "%s"
85+ }
86+
87+ resource "elasticstack_elasticsearch_alias" "test_alias" {
88+ name = "%s"
89+ indices = [elasticstack_elasticsearch_index.test_index.name]
90+ }
91+ ` , indexName , aliasName )
92+ }
93+
94+ func testAccResourceAliasUpdate (aliasName , indexName , indexName2 string ) string {
95+ return fmt .Sprintf (`
96+ resource "elasticstack_elasticsearch_index" "test_index" {
97+ name = "%s"
98+ }
99+
100+ resource "elasticstack_elasticsearch_index" "test_index2" {
101+ name = "%s"
102+ }
103+
104+ resource "elasticstack_elasticsearch_alias" "test_alias" {
105+ name = "%s"
106+ indices = [elasticstack_elasticsearch_index.test_index.name, elasticstack_elasticsearch_index.test_index2.name]
107+ is_write_index = true
108+ routing = "test-routing"
109+ }
110+ ` , indexName , indexName2 , aliasName )
111+ }
112+
113+ func testAccResourceAliasWithFilter (aliasName , indexName string ) string {
114+ return fmt .Sprintf (`
115+ resource "elasticstack_elasticsearch_index" "test_index" {
116+ name = "%s"
117+ }
118+
119+ resource "elasticstack_elasticsearch_alias" "test_alias" {
120+ name = "%s"
121+ indices = [elasticstack_elasticsearch_index.test_index.name]
122+ filter = jsonencode({
123+ term = {
124+ status = "published"
125+ }
126+ })
127+ }
128+ ` , indexName , aliasName )
129+ }
130+
131+ func testAccResourceAliasDataStreamCreate (aliasName , dsName string ) string {
132+ return fmt .Sprintf (`
133+ resource "elasticstack_elasticsearch_index_template" "test_ds_template" {
134+ name = "%s"
135+ index_patterns = ["%s"]
136+ data_stream {}
137+ }
138+
139+ resource "elasticstack_elasticsearch_data_stream" "test_ds" {
140+ name = "%s"
141+ depends_on = [
142+ elasticstack_elasticsearch_index_template.test_ds_template
143+ ]
144+ }
145+
146+ resource "elasticstack_elasticsearch_alias" "test_alias" {
147+ name = "%s"
148+ indices = [elasticstack_elasticsearch_data_stream.test_ds.name]
149+ }
150+ ` , dsName , dsName , dsName , aliasName )
151+ }
152+
153+ func checkResourceAliasDestroy (s * terraform.State ) error {
154+ client , err := clients .NewAcceptanceTestingClient ()
155+ if err != nil {
156+ return err
157+ }
158+
159+ for _ , rs := range s .RootModule ().Resources {
160+ if rs .Type != "elasticstack_elasticsearch_alias" {
161+ continue
162+ }
163+ compId , _ := clients .CompositeIdFromStr (rs .Primary .ID )
164+
165+ esClient , err := client .GetESClient ()
166+ if err != nil {
167+ return err
168+ }
169+
170+ res , err := esClient .Indices .GetAlias (
171+ esClient .Indices .GetAlias .WithName (compId .ResourceId ),
172+ )
173+ if err != nil {
174+ return err
175+ }
176+
177+ if res .StatusCode != 404 {
178+ return fmt .Errorf ("Alias (%s) still exists" , compId .ResourceId )
179+ }
180+ }
181+ return nil
182+ }
0 commit comments