|
6 | 6 |
|
7 | 7 | "github.com/hashicorp/terraform-plugin-sdk/helper/resource" |
8 | 8 | "github.com/nats-io/jsm.go" |
| 9 | + "github.com/nats-io/jsm.go/api" |
9 | 10 | "github.com/nats-io/nats.go" |
10 | 11 | ) |
11 | 12 |
|
@@ -61,6 +62,74 @@ resource "jetstream_stream" "test" { |
61 | 62 | } |
62 | 63 | ` |
63 | 64 |
|
| 65 | +const typeStreamConfigMirrorTransformed = ` |
| 66 | +provider "jetstream" { |
| 67 | + servers = "%s" |
| 68 | +} |
| 69 | +
|
| 70 | +resource "jetstream_stream" "other" { |
| 71 | + name = "OTHER" |
| 72 | + subjects = ["js.in.OTHER.>"] |
| 73 | +} |
| 74 | +
|
| 75 | +resource "jetstream_stream" "mirror_transform_test" { |
| 76 | + name = "MIRROR_TRANSFORM_TEST" |
| 77 | + description = "typeStreamConfigMirrorTransformed" |
| 78 | + mirror { |
| 79 | + name = "OTHER" |
| 80 | + start_seq = 11 |
| 81 | +
|
| 82 | + subject_transform { |
| 83 | + source = "js.in.OTHER.1.>" |
| 84 | + destination = "1.>" |
| 85 | + } |
| 86 | +
|
| 87 | + subject_transform { |
| 88 | + source = "js.in.OTHER.2.>" |
| 89 | + destination = "2.>" |
| 90 | + } |
| 91 | + } |
| 92 | +} |
| 93 | +` |
| 94 | + |
| 95 | +const typeStreamConfigSourcesTransformed = ` |
| 96 | +provider "jetstream" { |
| 97 | + servers = "%s" |
| 98 | +} |
| 99 | +
|
| 100 | +resource "jetstream_stream" "other1" { |
| 101 | + name = "OTHER1" |
| 102 | + subjects = ["js.in.OTHER1.>"] |
| 103 | +} |
| 104 | +
|
| 105 | +resource "jetstream_stream" "other2" { |
| 106 | + name = "OTHER2" |
| 107 | + subjects = ["js.in.OTHER2.>"] |
| 108 | +} |
| 109 | +
|
| 110 | +resource "jetstream_stream" "source_transform_test" { |
| 111 | + name = "SOURCE_TRANSFORM_TEST" |
| 112 | + description = "typeStreamConfigSourcesTransformed" |
| 113 | + source { |
| 114 | + name = "OTHER1" |
| 115 | +
|
| 116 | + subject_transform { |
| 117 | + source = "js.in.OTHER1.>" |
| 118 | + destination = "1.>" |
| 119 | + } |
| 120 | + } |
| 121 | +
|
| 122 | + source { |
| 123 | + name = "OTHER2" |
| 124 | +
|
| 125 | + subject_transform { |
| 126 | + source = "js.in.OTHER2.>" |
| 127 | + destination = "2.>" |
| 128 | + } |
| 129 | + } |
| 130 | +} |
| 131 | +` |
| 132 | + |
64 | 133 | const testStreamConfigSources = ` |
65 | 134 | provider "jetstream" { |
66 | 135 | servers = "%s" |
@@ -106,8 +175,12 @@ func TestResourceStream(t *testing.T) { |
106 | 175 | } |
107 | 176 |
|
108 | 177 | resource.Test(t, resource.TestCase{ |
109 | | - Providers: testJsProviders, |
110 | | - CheckDestroy: testStreamDoesNotExist(t, mgr, "TEST"), |
| 178 | + Providers: testJsProviders, |
| 179 | + CheckDestroy: resource.ComposeTestCheckFunc( |
| 180 | + testStreamDoesNotExist(t, mgr, "TEST"), |
| 181 | + testStreamDoesNotExist(t, mgr, "OTHER"), |
| 182 | + testStreamDoesNotExist(t, mgr, "OTHER1"), |
| 183 | + testStreamDoesNotExist(t, mgr, "OTHER2")), |
111 | 184 | Steps: []resource.TestStep{ |
112 | 185 | { |
113 | 186 | Config: fmt.Sprintf(testStreamConfigBasic, nc.ConnectedUrl()), |
@@ -145,6 +218,37 @@ func TestResourceStream(t *testing.T) { |
145 | 218 | testStreamHasSubjects(t, mgr, "TEST", []string{}), |
146 | 219 | ), |
147 | 220 | }, |
| 221 | + { |
| 222 | + Config: fmt.Sprintf(typeStreamConfigMirrorTransformed, nc.ConnectedUrl()), |
| 223 | + Check: resource.ComposeTestCheckFunc( |
| 224 | + testStreamExist(t, mgr, "MIRROR_TRANSFORM_TEST"), |
| 225 | + resource.TestCheckResourceAttr("jetstream_stream.mirror_transform_test", "mirror.0.name", "OTHER"), |
| 226 | + resource.TestCheckResourceAttr("jetstream_stream.mirror_transform_test", "mirror.0.start_seq", "11"), |
| 227 | + resource.TestCheckResourceAttr("jetstream_stream.mirror_transform_test", "mirror.0.subject_transform.0.source", "js.in.OTHER.1.>"), |
| 228 | + resource.TestCheckResourceAttr("jetstream_stream.mirror_transform_test", "mirror.0.subject_transform.0.destination", "1.>"), |
| 229 | + resource.TestCheckResourceAttr("jetstream_stream.mirror_transform_test", "mirror.0.subject_transform.1.source", "js.in.OTHER.2.>"), |
| 230 | + resource.TestCheckResourceAttr("jetstream_stream.mirror_transform_test", "mirror.0.subject_transform.1.destination", "2.>"), |
| 231 | + testStreamIsMirrorOf(t, mgr, "MIRROR_TRANSFORM_TEST", "OTHER"), |
| 232 | + testStreamIsMirrorTransformed(t, mgr, "MIRROR_TRANSFORM_TEST", api.SubjectTransformConfig{Source: "js.in.OTHER.1.>", Destination: "1.>"}), |
| 233 | + testStreamHasSubjects(t, mgr, "MIRROR_TRANSFORM_TEST", []string{}), |
| 234 | + ), |
| 235 | + }, |
| 236 | + { |
| 237 | + Config: fmt.Sprintf(typeStreamConfigSourcesTransformed, nc.ConnectedUrl()), |
| 238 | + Check: resource.ComposeTestCheckFunc( |
| 239 | + testStreamExist(t, mgr, "SOURCE_TRANSFORM_TEST"), |
| 240 | + resource.TestCheckResourceAttr("jetstream_stream.source_transform_test", "source.0.name", "OTHER1"), |
| 241 | + resource.TestCheckResourceAttr("jetstream_stream.source_transform_test", "source.0.subject_transform.0.source", "js.in.OTHER1.>"), |
| 242 | + resource.TestCheckResourceAttr("jetstream_stream.source_transform_test", "source.0.subject_transform.0.destination", "1.>"), |
| 243 | + resource.TestCheckResourceAttr("jetstream_stream.source_transform_test", "source.1.name", "OTHER2"), |
| 244 | + resource.TestCheckResourceAttr("jetstream_stream.source_transform_test", "source.1.subject_transform.0.source", "js.in.OTHER2.>"), |
| 245 | + resource.TestCheckResourceAttr("jetstream_stream.source_transform_test", "source.1.subject_transform.0.destination", "2.>"), |
| 246 | + testStreamIsSourceOf(t, mgr, "SOURCE_TRANSFORM_TEST", []string{"OTHER1", "OTHER2"}), |
| 247 | + testStreamIsSourceTransformed(t, mgr, "SOURCE_TRANSFORM_TEST", "OTHER1", api.SubjectTransformConfig{Source: "js.in.OTHER1.>", Destination: "1.>"}), |
| 248 | + testStreamIsSourceTransformed(t, mgr, "SOURCE_TRANSFORM_TEST", "OTHER2", api.SubjectTransformConfig{Source: "js.in.OTHER2.>", Destination: "2.>"}), |
| 249 | + testStreamHasSubjects(t, mgr, "SOURCE_TRANSFORM_TEST", []string{}), |
| 250 | + ), |
| 251 | + }, |
148 | 252 | { |
149 | 253 | Config: fmt.Sprintf(testStreamConfigSources, nc.ConnectedUrl()), |
150 | 254 | Check: resource.ComposeTestCheckFunc( |
|
0 commit comments