github.com/kubeshop/testkube@v1.17.23/contrib/executor/jmeterd/pkg/parser/xmljtl_test.go (about)

     1  package parser
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  const (
    10  	badXML = `
    11  12345
    12  `
    13  
    14  	successXML = `<testResults version="1.2">
    15  	<httpSample t="1259" it="0" lt="124" ct="80" ts="1690288938130" s="true" lb="Testkube - HTTP Request" rc="200" rm="OK" tn="Thread Group 1-1" dt="text" by="65222" sby="366" ng="1" na="1">
    16  		<assertionResult>
    17  			<name>Response Assertion</name>
    18  			<failure>false</failure>
    19  			<error>false</error>
    20  		</assertionResult>
    21  	</httpSample>
    22  </testResults>
    23  `
    24  
    25  	failedXML = `
    26  <testResults version="1.2">
    27  	<httpSample t="51" it="0" lt="0" ct="51" ts="1690366471701" s="false" lb="Testkube - HTTP Request" rc="Non HTTP response code: java.net.UnknownHostException" rm="Non HTTP response message: testkube.fakeshop.io: Name does not resolve" tn="Thread Group 1-1" dt="text" by="2327" sby="0" ng="1" na="1">
    28  		<assertionResult>
    29  			<name>Response Assertion</name>
    30  			<failure>true</failure>
    31  			<error>false</error>
    32  			<failureMessage>Test failed: code expected to equal / ****** received : [[[Non HTTP response code: java.net.UnknownHostException]]] ****** comparison: [[[200 ]]] /</failureMessage>
    33  		</assertionResult>
    34  	</httpSample>
    35  </testResults>
    36  `
    37  
    38  	mixedXML = `
    39  <testResults version="1.2">
    40  	<sample t="2" it="0" lt="0" ct="0" ts="1690724003768" s="true" lb="========== Starting GR Alarm verification =========" rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="7109" sby="0" ng="1" na="1">
    41  	</sample>
    42  	<httpSample t="946" it="0" lt="935" ct="737" ts="1690724004825" s="true" lb="Get Token - HTTP Request" rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="3774" sby="350" ng="1" na="1">
    43  	</httpSample>	
    44  	<sample t="0" it="0" lt="0" ct="0" ts="1690724048711" s="true" lb="Dummy cmdb Alarm cleared at : 2022-03-22T09:05:01.000Z " rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="10328" sby="0" ng="1" na="1">
    45  	</sample>	
    46  	<sample t="1" it="0" lt="0" ct="0" ts="1690724048871" s="false" lb="Alarms status are inactive. Unexpected Result! Failing the test!" rc="200" rm="OK" tn="Verify GR Alarms 1-1" dt="text" by="10328" sby="0" ng="1" na="1">
    47  		<assertionResult>
    48  		<name>Fail Test</name>
    49  		<failure>true</failure>
    50  		<error>false</error>
    51  		<failureMessage>Test FAILED</failureMessage>
    52  		</assertionResult>
    53  	</sample>		
    54  </testResults>
    55  `
    56  
    57  	errorXML = `<?xml version="1.0" encoding="UTF-8"?>
    58  <testResults version="1.2">
    59  
    60  </testResults>
    61  `
    62  )
    63  
    64  func TestParseXML(t *testing.T) {
    65  	t.Parallel()
    66  
    67  	t.Run("parse XML error test", func(t *testing.T) {
    68  		t.Parallel()
    69  
    70  		results, err := parseXML([]byte(errorXML))
    71  
    72  		assert.NoError(t, err)
    73  		assert.Nil(t, results.HTTPSamples)
    74  		assert.Nil(t, results.Samples)
    75  	})
    76  
    77  	t.Run("parse XML success test", func(t *testing.T) {
    78  		t.Parallel()
    79  
    80  		results, err := parseXML([]byte(successXML))
    81  
    82  		assert.NoError(t, err)
    83  		assert.Equal(t, 1, len(results.HTTPSamples))
    84  		assert.True(t, results.HTTPSamples[0].Success)
    85  		assert.Equal(t, 1259, results.HTTPSamples[0].Time)
    86  		assert.Equal(t, "Testkube - HTTP Request", results.HTTPSamples[0].Label)
    87  		assert.Equal(t, "Response Assertion", results.HTTPSamples[0].AssertionResult.Name)
    88  	})
    89  
    90  	t.Run("parse XML failed test", func(t *testing.T) {
    91  		t.Parallel()
    92  
    93  		results, err := parseXML([]byte(failedXML))
    94  
    95  		assert.NoError(t, err)
    96  		assert.Equal(t, 1, len(results.HTTPSamples))
    97  		assert.False(t, results.HTTPSamples[0].Success)
    98  		assert.Equal(t, 51, results.HTTPSamples[0].Time)
    99  		assert.Equal(t, "Testkube - HTTP Request", results.HTTPSamples[0].Label)
   100  		assert.Equal(t, "Test failed: code expected to equal / ****** received : [[[Non HTTP response code: java.net.UnknownHostException]]] ****** comparison: [[[200 ]]] /", results.HTTPSamples[0].AssertionResult.FailureMessage)
   101  	})
   102  
   103  	t.Run("parse bad XML", func(t *testing.T) {
   104  		t.Parallel()
   105  
   106  		_, err := parseXML([]byte(badXML))
   107  
   108  		assert.EqualError(t, err, "EOF")
   109  	})
   110  
   111  	t.Run("parse XML mixed test", func(t *testing.T) {
   112  		t.Parallel()
   113  
   114  		results, err := parseXML([]byte(mixedXML))
   115  
   116  		assert.NoError(t, err)
   117  		assert.Equal(t, 1, len(results.HTTPSamples))
   118  		assert.True(t, results.HTTPSamples[0].Success)
   119  		assert.Equal(t, 946, results.HTTPSamples[0].Time)
   120  		assert.Equal(t, "Get Token - HTTP Request", results.HTTPSamples[0].Label)
   121  
   122  		assert.Equal(t, 3, len(results.Samples))
   123  		assert.False(t, results.Samples[2].Success)
   124  		assert.Equal(t, 1, results.Samples[2].Time)
   125  		assert.Equal(t, "Alarms status are inactive. Unexpected Result! Failing the test!", results.Samples[2].Label)
   126  		assert.Equal(t, "Fail Test", results.Samples[2].AssertionResult.Name)
   127  	})
   128  }