more progress
This commit is contained in:
78
main.go
78
main.go
@@ -60,6 +60,10 @@ type CaptureBody struct {
|
|||||||
Data map[string]string
|
Data map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CaptureValues struct {
|
||||||
|
Data map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
type ExpectOptions struct {
|
type ExpectOptions struct {
|
||||||
Header HeaderTests `json:"header"`
|
Header HeaderTests `json:"header"`
|
||||||
Body BodyTests `json:"body"`
|
Body BodyTests `json:"body"`
|
||||||
@@ -80,6 +84,7 @@ type BodyTests struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var testDefinitions *TestDefinitions
|
var testDefinitions *TestDefinitions
|
||||||
|
var captureValues *CaptureValues
|
||||||
|
|
||||||
// fileExists returns true if the specified file exists and is not a directory
|
// fileExists returns true if the specified file exists and is not a directory
|
||||||
func fileExists(filename string) bool {
|
func fileExists(filename string) bool {
|
||||||
@@ -189,6 +194,9 @@ func RunTest(testCase *TestCase) error {
|
|||||||
fmt.Printf("Adding global headers to request\n")
|
fmt.Printf("Adding global headers to request\n")
|
||||||
for k, v := range testDefinitions.Headers {
|
for k, v := range testDefinitions.Headers {
|
||||||
fmt.Printf("Add global header %s = %s\n", k, v)
|
fmt.Printf("Add global header %s = %s\n", k, v)
|
||||||
|
|
||||||
|
// TODO : Check for capture tokens that need to be replaced before adding the value
|
||||||
|
|
||||||
req.Header.Add(k, v)
|
req.Header.Add(k, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -196,6 +204,9 @@ func RunTest(testCase *TestCase) error {
|
|||||||
// Then any test case specific headers
|
// Then any test case specific headers
|
||||||
for k, v := range testCase.Header {
|
for k, v := range testCase.Header {
|
||||||
fmt.Printf("Add Header %s = %s\n", k, v)
|
fmt.Printf("Add Header %s = %s\n", k, v)
|
||||||
|
|
||||||
|
// TODO : Check for capture tokens that need to be replaced before adding the value
|
||||||
|
|
||||||
req.Header.Add(k, v)
|
req.Header.Add(k, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,6 +230,16 @@ func RunTest(testCase *TestCase) error {
|
|||||||
|
|
||||||
fmt.Printf("Body response:\n%s\n", string(body))
|
fmt.Printf("Body response:\n%s\n", string(body))
|
||||||
|
|
||||||
|
// Iterate through testDefinitions.CaptureCases and see if there are any that match this test
|
||||||
|
// If we found one, add the appropriate replacement to captureValues
|
||||||
|
for i := range testDefinitions.CaptureCases {
|
||||||
|
if testDefinitions.CaptureCases[i].TestCaseName == testCase.Name {
|
||||||
|
fmt.Printf("Need to capture value from this test case\n")
|
||||||
|
// Capture anything needed
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// No errors if we reached this point
|
// No errors if we reached this point
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -230,8 +251,7 @@ func main() {
|
|||||||
|
|
||||||
// Prepare struct to store settings common to all tests
|
// Prepare struct to store settings common to all tests
|
||||||
testDefinitions = new(TestDefinitions)
|
testDefinitions = new(TestDefinitions)
|
||||||
|
captureValues = new(CaptureValues)
|
||||||
//testCaseDefinition := new(InputData)
|
|
||||||
|
|
||||||
// Command line arguments
|
// Command line arguments
|
||||||
var inputJson string
|
var inputJson string
|
||||||
@@ -250,11 +270,13 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Process the input json
|
||||||
ReadInput(s, testDefinitions)
|
ReadInput(s, testDefinitions)
|
||||||
|
|
||||||
// For debugging, just dump the output
|
// For debugging, just dump the output
|
||||||
fmt.Printf("%+v\n", testDefinitions)
|
fmt.Printf("%+v\n", testDefinitions)
|
||||||
|
|
||||||
|
// Perform specified test cases
|
||||||
for i := range testDefinitions.TestCases {
|
for i := range testDefinitions.TestCases {
|
||||||
RunTest(&testDefinitions.TestCases[i])
|
RunTest(&testDefinitions.TestCases[i])
|
||||||
}
|
}
|
||||||
@@ -332,16 +354,52 @@ func ReadInput(data []byte, testDefinitions *TestDefinitions) {
|
|||||||
return
|
return
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO : capture
|
// Process the "capture" settings that allow us to use values from one test case in subsequent test cases
|
||||||
// each capture node has a name that links it to the test case that captures that data
|
// each capture node has a name that links it to the test case that captures that data
|
||||||
if capturecase, ok := o.Get("capture"); ok {
|
if capture, ok := o.Get("capture"); ok {
|
||||||
captureCasesMap := capturecase.(orderedmap.OrderedMap)
|
captureMap := capture.(orderedmap.OrderedMap)
|
||||||
captureCasesKeys := captureCasesMap.Keys()
|
captureKeys := captureMap.Keys()
|
||||||
for i, outerKey := range captureCasesKeys {
|
for i, outerKey := range captureKeys {
|
||||||
fmt.Printf("[%d] : Capture from %s\n", i, outerKey)
|
// Define a new capture case object to record these details
|
||||||
|
|
||||||
thisCaptureCase := new(CaptureCase)
|
thisCaptureCase := new(CaptureCase)
|
||||||
thisCaptureCase.TestCaseName = outerKey
|
|
||||||
|
// Make sure we can access the capture defintiion
|
||||||
|
if captureCase, ok := captureMap.Get(outerKey); ok {
|
||||||
|
// Store the test case name that this capture will come from
|
||||||
|
thisCaptureCase.TestCaseName = outerKey
|
||||||
|
fmt.Printf("[%d] : Capture from %s\n", i, outerKey)
|
||||||
|
|
||||||
|
// Get capture data from body
|
||||||
|
thisCaptureCaseMap := captureCase.(orderedmap.OrderedMap)
|
||||||
|
if body, ok := thisCaptureCaseMap.Get("body"); ok {
|
||||||
|
//fmt.Printf("This capture case has body defined\n")
|
||||||
|
|
||||||
|
bodyMap := body.(orderedmap.OrderedMap)
|
||||||
|
bodyMapKeys := bodyMap.Keys()
|
||||||
|
|
||||||
|
bodyData := make(map[string]string)
|
||||||
|
|
||||||
|
for _, bodyKey := range bodyMapKeys {
|
||||||
|
if bodyVal, ok := bodyMap.Get(bodyKey); ok {
|
||||||
|
switch vType := bodyVal.(type) {
|
||||||
|
case string:
|
||||||
|
fmt.Printf("Capturing '%s' from test result and using '%s' for replacement token\n", bodyKey, bodyVal.(string))
|
||||||
|
|
||||||
|
// Store capture info
|
||||||
|
bodyData[bodyKey] = bodyVal.(string)
|
||||||
|
|
||||||
|
default:
|
||||||
|
fmt.Printf("received unexpected value type, %T\n", vType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
captureBody := new(CaptureBody)
|
||||||
|
captureBody.Data = bodyData
|
||||||
|
thisCaptureCase.CaptureData.Body = *captureBody
|
||||||
|
|
||||||
|
}
|
||||||
|
// TODO : header
|
||||||
|
}
|
||||||
|
|
||||||
testDefinitions.CaptureCases = append(testDefinitions.CaptureCases, *thisCaptureCase)
|
testDefinitions.CaptureCases = append(testDefinitions.CaptureCases, *thisCaptureCase)
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
"method": "GET",
|
"method": "GET",
|
||||||
"description": "List secrets",
|
"description": "List secrets",
|
||||||
"header": {
|
"header": {
|
||||||
"Authorization": "Bearer %access_token%"
|
"Authorization": "Bearer %ACCESS_TOKEN%"
|
||||||
},
|
},
|
||||||
"body": {
|
"body": {
|
||||||
"Hostname":"host999.cdc.home",
|
"Hostname":"host999.cdc.home",
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
"capture": {
|
"capture": {
|
||||||
"test1": {
|
"test1": {
|
||||||
"body": {
|
"body": {
|
||||||
"access_token": "access_token"
|
"access_token": "%ACCESS_TOKEN%"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user