Skip to content

Commit

Permalink
Feature/206 tf test (#207)
Browse files Browse the repository at this point in the history
added Example of using tf-cmd-api show command to write pre-provision test similar to sentinel using groovy and spock

authored-by: robert <rdhutto1@gamil.com>
  • Loading branch information
roberthutto committed Aug 18, 2020
1 parent e5f81cc commit 9c6675e
Show file tree
Hide file tree
Showing 21 changed files with 2,369 additions and 19 deletions.
5 changes: 5 additions & 0 deletions examples/tf-s3/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@
<artifactId>tf-cmd-api</artifactId>
<version>${tf-maven-version}</version>
</dependency>
<dependency>
<groupId>com.deliveredtechnologies</groupId>
<artifactId>tf-test</artifactId>
<version>${tf-maven-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
Expand Down
31 changes: 31 additions & 0 deletions examples/tf-s3/src/main/tf/s3_sentinel_demo/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
provider "aws" {
region = "us-east-1"
}

resource "aws_s3_bucket" "bucket1" {
bucket = "bucket1"

versioning {
enabled = true
}

tags = {
application_id = "cna"
stack_name = "stacked"
created_by = "rhutto@deliveredtech.com"
}
}

resource "aws_s3_bucket" "bucket2" {
bucket = "bucket2"

versioning {
enabled = true
}

tags = {
application_id = "cna"
stack_name = "stacked"
created_by = "rhutto@deliveredtech.com"
}
}
63 changes: 63 additions & 0 deletions examples/tf-s3/src/test/groovy/tf/s3/S3SentinelSpec.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package tf.s3


import com.deliveredtechnologies.terraform.fluent.api.Terraform
import com.deliveredtechnologies.terraform.fluent.api.TfPlan
import spock.lang.Shared
import spock.lang.Specification
import spock.lang.Unroll

class S3SentinelSpec extends Specification {

@Shared
TfPlan tfplan;
@Shared
mandatory_tags = [
"application_id",
"stack_name",
"created_by",
]

@Unroll("#s3Bucket.address has all the mandatory tags")
def "S3 resources have all mandatory tags"() {

expect:
hasMandatoryTags(s3Bucket)

where:
s3Bucket << tfplan.getResourcesByType("aws_s3_bucket")
}

@Unroll("#s3Bucket.address versioning enabled == true")
def "S3 versioning enabled"() {

expect:
isVersioningEnabled(s3Bucket)

where:
s3Bucket << tfplan.getResourcesByType("aws_s3_bucket")
}

void isVersioningEnabled(Map resource) {
Map m = resource.change.after
assert m.containsKey("versioning")
assert m.versioning[0].enabled == true
}

void hasMandatoryTags(Map resource) {
mandatory_tags.each {tag ->
Map resourceTags = resource.change.after.tags
assert resourceTags.containsKey(tag)
}
}

def setupSpec() {

Terraform terraform = new Terraform().withRootDir('s3_sentinel_demo')
.withProperties([
noColor: true,
])
tfplan = terraform.initAndPlan()
}

}
2 changes: 0 additions & 2 deletions examples/tf-s3/src/test/groovy/tf/s3/S3Spec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import com.deliveredtechnologies.terraform.api.TerraformApply
import com.deliveredtechnologies.terraform.api.TerraformDestroy
import com.deliveredtechnologies.terraform.api.TerraformInit
import com.deliveredtechnologies.terraform.api.TerraformOutput
import com.deliveredtechnologies.terraform.api.TerraformPlan
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import spock.lang.Specification

Expand Down

0 comments on commit 9c6675e

Please sign in to comment.