Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion citrixadc/data_source_citrixadc_hanode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
const testAccDataSourceHanode = `
data "citrixadc_hanode" "hanode" {
hanode_id = 0
}
}
`

func TestAccDataSourceHanode_basic(t *testing.T) {
Expand Down
28 changes: 28 additions & 0 deletions citrixadc/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,34 @@ import (
"github.com/citrix/adc-nitro-go/service"
)

func doSslcertkeyPreChecks(t *testing.T) {
testAccPreCheck(t)

uploads := []string{
"ca.crt",
"intermediate.crt",
"certificate1.crt",
"certificate2.crt",
"certificate3.crt",
"key1.pem",
"key2.pem",
"key3.pem",
}

c, err := testHelperInstantiateClient("", "", "", false)
if err != nil {
t.Fatalf("Failed to instantiate client. %v\n", err)
}

//c := testAccProvider.Meta().(*NetScalerNitroClient)
for _, filename := range uploads {
err := uploadTestdataFile(c, t, filename, "/var/tmp")
if err != nil {
t.Errorf("%v", err)
}
}
}

func uploadTestdataFile(c *NetScalerNitroClient, t *testing.T, filename, targetDir string) error {
client := c.client

Expand Down
58 changes: 29 additions & 29 deletions citrixadc/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,35 +112,35 @@ func providerDataSources() map[string]*schema.Resource {

func providerResources() map[string]*schema.Resource {
return map[string]*schema.Resource{
"citrixadc_lbmetrictable": resourceCitrixAdcLbmetrictable(),
"citrixadc_sslservice_sslcertkey_binding": resourceCitrixAdcSslservice_sslcertkey_binding(),
"citrixadc_sslservice_sslciphersuite_binding": resourceCitrixAdcSslservice_sslciphersuite_binding(),
"citrixadc_sslservice_ecccurve_binding": resourceCitrixAdcSslservice_ecccurve_binding(),
"citrixadc_sslservice": resourceCitrixAdcSslservice(),
"citrixadc_sslfipskey": resourceCitrixAdcSslfipskey(),
"citrixadc_sslhsmkey": resourceCitrixAdcSslhsmkey(),
"citrixadc_sslcacertgroup_sslcertkey_binding": resourceCitrixAdcSslcacertgroup_sslcertkey_binding(),
"citrixadc_lbroute6": resourceCitrixAdcLbroute6(),
"citrixadc_sslpolicylabel": resourceCitrixAdcSslpolicylabel(),
"citrixadc_ssllogprofile": resourceCitrixAdcSsllogprofile(),
"citrixadc_sslprofile_sslcertkey_binding": resourceCitrixAdcSslprofile_sslcertkey_binding(),
"citrixadc_sslpolicylabel_sslpolicy_binding": resourceCitrixAdcSslpolicylabel_sslpolicy_binding(),
"citrixadc_lbvserver_botpolicy_binding": resourceCitrixAdcLbvserver_botpolicy_binding(),
"citrixadc_lbvserver_auditsyslogpolicy_binding": resourceCitrixAdcLbvserver_auditsyslogpolicy_binding(),
"citrixadc_sslcacertgroup": resourceCitrixAdcSslcacertgroup(),
"citrixadc_botsettings": resourceCitrixAdcBotsettings(),
"citrixadc_botpolicy": resourceCitrixAdcBotpolicy(),
"citrixadc_lbvserver_analyticsprofile_binding": resourceCitrixAdcLbvserver_analyticsprofile_binding(),
"citrixadc_lbvserver_appqoepolicy_binding": resourceCitrixAdcLbvserver_appqoepolicy_binding(),
"citrixadc_lbmonitor_metric_binding": resourceCitrixAdcLbmonitor_metric_binding(),
"citrixadc_lbvserver": resourceCitrixAdcLbvserver(),
"citrixadc_service": resourceCitrixAdcService(),
"citrixadc_csvserver": resourceCitrixAdcCsvserver(),
"citrixadc_cspolicy": resourceCitrixAdcCspolicy(),
"citrixadc_csaction": resourceCitrixAdcCsaction(),
"citrixadc_sslaction": resourceCitrixAdcSslaction(),
"citrixadc_sslpolicy": resourceCitrixAdcSslpolicy(),
"citrixadc_sslcertkey": resourceCitrixAdcSslcertkey(),
"citrixadc_lbmetrictable": resourceCitrixAdcLbmetrictable(),
"citrixadc_sslservice_sslcertkey_binding": resourceCitrixAdcSslservice_sslcertkey_binding(),
"citrixadc_sslservice_sslciphersuite_binding": resourceCitrixAdcSslservice_sslciphersuite_binding(),
"citrixadc_sslservice_ecccurve_binding": resourceCitrixAdcSslservice_ecccurve_binding(),
"citrixadc_sslservice": resourceCitrixAdcSslservice(),
"citrixadc_sslfipskey": resourceCitrixAdcSslfipskey(),
"citrixadc_sslhsmkey": resourceCitrixAdcSslhsmkey(),
"citrixadc_sslcacertgroup_sslcertkey_binding": resourceCitrixAdcSslcacertgroup_sslcertkey_binding(),
"citrixadc_lbroute6": resourceCitrixAdcLbroute6(),
"citrixadc_sslpolicylabel": resourceCitrixAdcSslpolicylabel(),
"citrixadc_ssllogprofile": resourceCitrixAdcSsllogprofile(),
"citrixadc_sslprofile_sslcertkey_binding": resourceCitrixAdcSslprofile_sslcertkey_binding(),
"citrixadc_sslpolicylabel_sslpolicy_binding": resourceCitrixAdcSslpolicylabel_sslpolicy_binding(),
"citrixadc_lbvserver_botpolicy_binding": resourceCitrixAdcLbvserver_botpolicy_binding(),
"citrixadc_lbvserver_auditsyslogpolicy_binding": resourceCitrixAdcLbvserver_auditsyslogpolicy_binding(),
"citrixadc_sslcacertgroup": resourceCitrixAdcSslcacertgroup(),
"citrixadc_botsettings": resourceCitrixAdcBotsettings(),
"citrixadc_botpolicy": resourceCitrixAdcBotpolicy(),
"citrixadc_lbvserver_analyticsprofile_binding": resourceCitrixAdcLbvserver_analyticsprofile_binding(),
"citrixadc_lbvserver_appqoepolicy_binding": resourceCitrixAdcLbvserver_appqoepolicy_binding(),
"citrixadc_lbmonitor_metric_binding": resourceCitrixAdcLbmonitor_metric_binding(),
"citrixadc_lbvserver": resourceCitrixAdcLbvserver(),
"citrixadc_service": resourceCitrixAdcService(),
"citrixadc_csvserver": resourceCitrixAdcCsvserver(),
"citrixadc_cspolicy": resourceCitrixAdcCspolicy(),
"citrixadc_csaction": resourceCitrixAdcCsaction(),
"citrixadc_sslaction": resourceCitrixAdcSslaction(),
"citrixadc_sslpolicy": resourceCitrixAdcSslpolicy(),
// "citrixadc_sslcertkey": resourceCitrixAdcSslcertkey(),
"citrixadc_sslprofile": resourceCitrixAdcSslprofile(),
"citrixadc_sslparameter": resourceCitrixAdcSslparameter(),
"citrixadc_ssldhparam": resourceCitrixAdcSsldhparam(),
Expand Down
196 changes: 196 additions & 0 deletions citrixadc_framework/acctests/helpers_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
package acctests

import (
"encoding/base64"
"errors"
"fmt"
"io/ioutil"
"log"
"os"
"path"
"regexp"
"runtime"
"strings"
"sync"
"testing"

"github.com/citrix/adc-nitro-go/resource/config/system"
"github.com/citrix/adc-nitro-go/service"
)

// NetScalerNitroClient is a wrapper around the service.NitroClient
type NetScalerNitroClient struct {
Username string
Password string
Endpoint string
client *service.NitroClient
lock sync.Mutex
}

func doSslcertkeyPreChecks(t *testing.T) {
testAccPreCheck(t)

uploads := []string{
"ca.crt",
"intermediate.crt",
"certificate1.crt",
"certificate2.crt",
"certificate3.crt",
"key1.pem",
"key2.pem",
"key3.pem",
"servercert1.cert",
"servercert1.key",
"intermediate1.cert",
"rootcert1.cert",
"servercert2.cert",
"servercert2.key",
"servercert3.cert",
"servercert3.key",
}

c, err := testHelperInstantiateClient("", "", "", false)
if err != nil {
t.Fatalf("Failed to instantiate client. %v\n", err)
}

//c := testAccProvider.Meta().(*NetScalerNitroClient)
for _, filename := range uploads {
err := uploadTestdataFile(c, t, filename, "/nsconfig/ssl")
if err != nil {
t.Errorf("%v", err)
}
}
}

func uploadTestdataFile(c *NetScalerNitroClient, t *testing.T, filename, targetDir string) error {
client := c.client

// Get here path
_, here_filename, _, _ := runtime.Caller(1)
b, err := ioutil.ReadFile(path.Join(path.Dir(here_filename), "testdata", filename))

if err != nil {
return err
}

sf := system.Systemfile{
Filename: filename,
Filecontent: base64.StdEncoding.EncodeToString(b),
Filelocation: targetDir,
}
_, err = client.AddResource(service.Systemfile.Type(), filename, &sf)
if err != nil && strings.Contains(err.Error(), "File already exists") {
url_args := map[string]string{"filelocation": strings.Replace(targetDir, "/", "%2F", -1)}
err := client.DeleteResourceWithArgsMap(service.Systemfile.Type(), filename, url_args)
if err != nil {
return err
}
_, err = client.AddResource(service.Systemfile.Type(), filename, &sf)
if err != nil {
return err
}
}
return nil
}

var helperClient *NetScalerNitroClient

func testHelperInstantiateClient(nsUrl, username, password string, sslVerify bool) (*NetScalerNitroClient, error) {
if helperClient != nil {
log.Printf("Returning existing helper client\n")
return helperClient, nil
}

if nsUrl == "" {
if nsUrl = os.Getenv("NS_URL"); nsUrl == "" {
return nil, errors.New("No nsUrl defined")
}
}

if username == "" {
if username = os.Getenv("NS_LOGIN"); username == "" {
username = "nsroot"
}
}

if password == "" {
if password = os.Getenv("NS_PASSWORD"); password == "" {
password = "nsroot"
}
}

c := NetScalerNitroClient{
Username: username,
Password: password,
Endpoint: nsUrl,
}

params := service.NitroParams{
Url: nsUrl,
Username: username,
Password: password,
//ProxiedNs: d.Get("proxied_ns").(string),
SslVerify: sslVerify,
}
client, err := service.NewNitroClientFromParams(params)
if err != nil {
return nil, err
}

c.client = client
helperClient = &c
log.Printf("Helper client instantiated\n")

return helperClient, nil
}

func testHelperEnsureResourceDeletion(c *NetScalerNitroClient, t *testing.T, resourceType, resourceName string, deleteArgsMap map[string]string) {
if _, err := c.client.FindResource(resourceType, resourceName); err != nil {
targetSubstring := fmt.Sprintf("No resource %s of type %s found", resourceName, resourceType)
actualError := err.Error()
t.Logf("targetSubstring \"%s\"", targetSubstring)
t.Logf("actualError \"%s\"", actualError)
if strings.Contains(err.Error(), targetSubstring) {
t.Logf("Ensure delete found no remaining resource %s", resourceName)
return
} else {
t.Fatalf("Unexpected error while ensuring delete of resource %v. %v", resourceName, err)
return
}
}

// Fallthrough
if deleteArgsMap == nil {
if err := c.client.DeleteResource(resourceType, resourceName); err != nil {
t.Logf("Ensuring delete failed for resource %s.", resourceName)
t.Fatal(err)
return
} else {
t.Logf("Ensuring deletion of %s successful", resourceName)
}
} else {
if err := c.client.DeleteResourceWithArgsMap(resourceType, resourceName, deleteArgsMap); err != nil {
t.Logf("Ensuring delete failed for resource %s with argsMap %v", resourceName, deleteArgsMap)
t.Fatal(err)
return
} else {
t.Logf("Ensuring deletion of %s successful", resourceName)
}
}

}
func testHelperVerifyImmutabilityFunc(c *NetScalerNitroClient, t *testing.T, resourceType, resourceName string, resourceInstance interface{}, attribute string) {
if _, err := c.client.UpdateResource(resourceType, resourceName, resourceInstance); err != nil {
r := regexp.MustCompile(fmt.Sprintf("errorcode.*278.*Invalid argument \\[%s\\]", attribute))

if r.Match([]byte(err.Error())) {
t.Logf("Succesfully verified immutability of attribute \"%s\"", attribute)
} else {
t.Errorf("Error while assesing immutability of attribute \"%s\"", attribute)
t.Fatal(err)
}
} else {
t.Fatalf("Error (no error) while assesing immutability of attribute \"%s\"", attribute)
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package citrixadc_framework
package acctests

import (
"fmt"
"os"
"testing"

"github.com/citrix/adc-nitro-go/service"
"github.com/citrix/terraform-provider-citrixadc/citrixadc_framework/provider"
"github.com/hashicorp/terraform-plugin-framework/providerserver"
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
)
Expand All @@ -15,7 +16,7 @@ import (
// CLI command executed to create a provider server to which the CLI can
// reattach.
var testAccProtoV6ProviderFactories = map[string]func() (tfprotov6.ProviderServer, error){
"citrixadc": providerserver.NewProtocol6WithError(New("test")()),
"citrixadc": providerserver.NewProtocol6WithError(provider.New("test")()),
}

func testAccPreCheck(t *testing.T) {
Expand Down Expand Up @@ -55,33 +56,33 @@ func testAccGetFrameworkClient() (*service.NitroClient, error) {
return client, nil
}

func TestProviderNew(t *testing.T) {
provider := New("test")()
// func TestProviderNew(t *testing.T) {
// provider := provider.New("test")()

if provider == nil {
t.Fatal("Provider should not be nil")
}
// if provider == nil {
// t.Fatal("Provider should not be nil")
// }

// Test that the provider implements the required interface
_, ok := provider.(*CitrixAdcFrameworkProvider)
if !ok {
t.Fatal("Provider should be of type *CitrixAdcFrameworkProvider")
}
}
// // Test that the provider implements the required interface
// _, ok := provider.(*(provider.CitrixAdcFrameworkProvider))
// if !ok {
// t.Fatal("Provider should be of type *CitrixAdcFrameworkProvider")
// }
// }

func TestProviderModel(t *testing.T) {
model := CitrixAdcFrameworkProviderModel{}
// func TestProviderModel(t *testing.T) {
// model := provider.CitrixAdcFrameworkProviderModel{}

// Test that all fields are properly defined
if !model.Username.IsNull() {
t.Error("New model Username should be null")
}
// // Test that all fields are properly defined
// if !model.Username.IsNull() {
// t.Error("New model Username should be null")
// }

if !model.Password.IsNull() {
t.Error("New model Password should be null")
}
// if !model.Password.IsNull() {
// t.Error("New model Password should be null")
// }

if !model.Endpoint.IsNull() {
t.Error("New model Endpoint should be null")
}
}
// if !model.Endpoint.IsNull() {
// t.Error("New model Endpoint should be null")
// }
// }
Loading