Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
getKSA_key_test.go 4.28 KiB
package integration_tests

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
	"testing"
	"time"

	integration_test_utils "code.fbi.h-da.de/danet/quant/integration-tests/code/integrationTestUtils"
	"github.com/stretchr/testify/assert"
)

type LogFile struct {
	Source string            `json:"source"`
	Body   PushKSAKeyRequest `json:"body"`
}
type PushKSAKeyRequest struct {
	RequestID string   `json:"request_ID"`
	ProcessID string   `json:"process_ID"`
	KSAKeys   []KSAKey `json:"ksa_keys"`
}

type KSAKey struct {
	KeyID string `json:"key_ID"`
	Key   string `json:"key"`
}

func TestGetKSAKey(t *testing.T) {
	kms2URL := "127.0.0.1:7031"
	kms2URL_ENV := os.Getenv("INTEGRATION_TEST_KMS2_URL")
	if kms2URL_ENV != "" {
		kms2URL = kms2URL_ENV
	}
	kms1URL := "127.0.0.1:7030"
	kms1URL_ENV := os.Getenv("INTEGRATION_TEST_KMS1_URL")
	if kms1URL_ENV != "" {
		kms1URL = kms1URL_ENV
	}
	kms1AkmsURL := "127.0.0.1:9696"
	kms1AkmsURL_ENV := os.Getenv("INTEGRATION_TEST_KMS1_AKMS_URL")
	if kms1AkmsURL_ENV != "" {
		kms1AkmsURL = kms1AkmsURL_ENV
	}
	logFileURL := "127.0.0.1:4444"
	logFileURL_ENV := os.Getenv("INTEGRATION_TEST_LOG_FILE_URL")
	if logFileURL_ENV != "" {
		logFileURL = logFileURL_ENV
	}
	logFileURL2 := "127.0.0.1:4445"
	logFileURL_ENV2 := os.Getenv("INTEGRATION_TEST_LOG_FILE_URL")
	if logFileURL_ENV2 != "" {
		logFileURL2 = logFileURL_ENV2
	}

	output, err := integration_test_utils.GnmicCommand(kms2URL, "set", "--update-path", "key-routing-sessions/routing-sessions[path-id=38e0588b-6a2d-42c9-85a0-887cc877c299]", "--update-file", "../../config/kms/kms_2.json")
	if err != nil {
		t.Errorf("Error setting routing-session: %s; %s", err, output)
	}
	output, err = integration_test_utils.GnmicCommand(kms1URL, "set", "--update-path", "key-routing-sessions/routing-sessions[path-id=38e0588b-6a2d-42c9-85a0-887cc877c299]", "--update-file", "../../config/kms/kms_1.json")
	if err != nil {
		t.Errorf("Error setting routing-session: %s; %s", err, output)
	}

	time.Sleep(time.Duration(2) * time.Second)

	url := fmt.Sprintf("http://%s/api/v1/keys/ksa_key_req", kms1AkmsURL)
	output, err = integration_test_utils.CurlCommand(url, `{
        "receiving_CKMS_ID": "kms_2:50910",
        "request_ID": "request_ID-1234",
        "key_properties": {
            "number": 1,
            "key_length": 256,
            "timeout": 20,
            "TTL": 24
        }
    }`)
	if err != nil {
		t.Errorf("Error issuing curl command: %s; %s", err, output)
	}

	resp, err := http.Get("http://" + logFileURL + "/debug/get_log_file")
	if err != nil {
		t.Errorf("Error making HTTP request: %s", err)
		return
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		t.Errorf("Error reading response body: %s", err)
		return
	}

	var logFile LogFile
	err = json.Unmarshal(body, &logFile)
	if err != nil {
		t.Errorf("Error parsing body into PushKSAKeyRequest: %s", err)
		return
	}
	assert.NotNil(t, logFile.Source)
	assert.Equal(t, "request_ID-1234", logFile.Body.RequestID)
	assert.Equal(t, "request_ID-1234", logFile.Body.ProcessID)
	assert.Equal(t, 1, len(logFile.Body.KSAKeys))
	assert.NotNil(t, logFile.Body.KSAKeys[0].KeyID)
	assert.NotNil(t, logFile.Body.KSAKeys[0].Key)

	resp, err = http.Get("http://" + logFileURL2 + "/debug/get_log_file")
	if err != nil {
		t.Errorf("Error making HTTP request: %s", err)
		return
	}
	defer resp.Body.Close()

	body, err = ioutil.ReadAll(resp.Body)
	if err != nil {
		t.Errorf("Error reading response body: %s", err)
		return
	}
	var logFile2 LogFile

	err = json.Unmarshal(body, &logFile2)
	if err != nil {
		t.Errorf("Error parsing body into PushKSAKeyRequest: %s", err)
		return
	}
	assert.NotNil(t, logFile2.Source)
	assert.Equal(t, "request_ID-1234", logFile2.Body.RequestID)
	assert.Equal(t, "request_ID-1234", logFile2.Body.ProcessID)
	assert.Equal(t, 1, len(logFile2.Body.KSAKeys))
	assert.NotNil(t, logFile2.Body.KSAKeys[0].KeyID)
	assert.NotNil(t, logFile2.Body.KSAKeys[0].Key)

	// Check that both log files are identical except for the source
	assert.NotEqual(t, logFile.Source, logFile2.Source)
	assert.Equal(t, logFile.Body.RequestID, logFile2.Body.RequestID)
	assert.Equal(t, logFile.Body.ProcessID, logFile2.Body.ProcessID)
	assert.Equal(t, logFile.Body.KSAKeys[0].KeyID, logFile2.Body.KSAKeys[0].KeyID)
	assert.Equal(t, logFile.Body.KSAKeys[0].Key, logFile2.Body.KSAKeys[0].Key)

}