You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/06/21 08:30:23 UTC

[plc4x] 01/02: fix(plc4go/spi): increase sleep times of DriverTestRunner

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 77453bf1c465ae4c069e3152b9f605af5be07a0f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Jun 20 17:16:36 2023 +0200

    fix(plc4go/spi): increase sleep times of DriverTestRunner
---
 plc4go/spi/testutils/DriverTestRunner.go | 50 +++++++++++++++-----------------
 1 file changed, 23 insertions(+), 27 deletions(-)

diff --git a/plc4go/spi/testutils/DriverTestRunner.go b/plc4go/spi/testutils/DriverTestRunner.go
index 15a11e3a68..b5a639ca2b 100644
--- a/plc4go/spi/testutils/DriverTestRunner.go
+++ b/plc4go/spi/testutils/DriverTestRunner.go
@@ -92,13 +92,13 @@ type TestTransportInstance interface {
 }
 
 func (m DriverTestsuite) Run(t *testing.T, driverManager plc4go.PlcDriverManager, testcase DriverTestcase) error {
-	var options []string
+	var driverParameters []string
 	for key, value := range m.driverParameters {
-		options = append(options, fmt.Sprintf("%s=%s", key, value))
+		driverParameters = append(driverParameters, fmt.Sprintf("%s=%s", key, value))
 	}
 	optionsString := ""
-	if len(options) > 0 {
-		optionsString = "?" + strings.Join(options, "&")
+	if len(driverParameters) > 0 {
+		optionsString = "?" + strings.Join(driverParameters, "&")
 	}
 	// Get a connection
 	connectionChan := driverManager.GetConnection(m.driverName + ":test://hurz" + optionsString)
@@ -119,8 +119,9 @@ func (m DriverTestsuite) Run(t *testing.T, driverManager plc4go.PlcDriverManager
 			return errors.Wrap(err, "error in setup step "+testStep.name)
 		}
 		// We sleep a bit to not run too fast into the post setup steps and give connections a bit time to settle built up
-		time.Sleep(10 * time.Millisecond)
+		time.Sleep(100 * time.Millisecond) // TODO: this is really bad as on CI sometimes those sleeps are not enough...
 	}
+	t.Log("setup done")
 
 	// Run the actual scenario steps
 	t.Logf("\n-------------------------------------------------------\nRunning testcases for: %s \n-------------------------------------------------------\n", testcase.name)
@@ -129,8 +130,9 @@ func (m DriverTestsuite) Run(t *testing.T, driverManager plc4go.PlcDriverManager
 		if err != nil {
 			return errors.Wrap(err, "error in step "+testStep.name)
 		}
-		time.Sleep(10 * time.Millisecond)
+		time.Sleep(100 * time.Millisecond) // TODO: this is really bad as on CI sometimes those sleeps are not enough...
 	}
+	t.Log("test steps done")
 
 	// Run the teardown steps
 	t.Logf("\n-------------------------------------------------------\nPerforming teardown for: %s \n-------------------------------------------------------\n", testcase.name)
@@ -139,8 +141,9 @@ func (m DriverTestsuite) Run(t *testing.T, driverManager plc4go.PlcDriverManager
 		if err != nil {
 			return errors.Wrap(err, "error in teardown step "+testStep.name)
 		}
-		time.Sleep(10 * time.Millisecond)
+		time.Sleep(100 * time.Millisecond) // TODO: this is really bad as on CI sometimes those sleeps are not enough...
 	}
+	t.Log("tear down done")
 
 	t.Logf("\n-------------------------------------------------------\nDone\n-------------------------------------------------------\n")
 	return nil
@@ -176,8 +179,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 			}
 
 			// Execute the read-request and store the response-channel in the testcase.
-			t.Logf("Execute read request (%T)", readRequest)
-			t.Logf("\n%s", readRequest)
+			t.Logf("Execute read request (%T)\n%[1]s", readRequest)
 			if testcase.readRequestResultChannel != nil {
 				return errors.New("testcase read-request result channel already occupied")
 			}
@@ -213,8 +215,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 			if err != nil {
 				return errors.Wrap(err, "Error creating write-request")
 			}
-			t.Logf("Execute write request (%T)", writeRequest)
-			t.Logf("\n%s", writeRequest)
+			t.Logf("Execute write request (%T)\n%[1]s", writeRequest)
 			if testcase.writeRequestResultChannel != nil {
 				return errors.New("testcase write-request result channel already occupied")
 			}
@@ -235,8 +236,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 			// Serialize the response to XML
 			xmlWriteBuffer := utils.NewXmlWriteBuffer()
 			response := readRequestResult.GetResponse()
-			t.Logf("Got response (%T)", response)
-			t.Logf("\n%s", response)
+			t.Logf("Got response (%T)\n%[1]s", response)
 			err := response.(utils.Serializable).SerializeWithWriteBuffer(context.Background(), xmlWriteBuffer)
 			if err != nil {
 				return errors.Wrap(err, "error serializing response")
@@ -263,8 +263,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 			// Serialize the response to XML
 			xmlWriteBuffer := utils.NewXmlWriteBuffer()
 			response := writeResponseResult.GetResponse()
-			t.Logf("Got response (%T)", response)
-			t.Logf("\n%s", response)
+			t.Logf("Got response (%T)\n%[1]s", response)
 			err := response.(utils.Serializable).SerializeWithWriteBuffer(context.Background(), xmlWriteBuffer)
 			if err != nil {
 				return errors.Wrap(err, "error serializing response")
@@ -290,8 +289,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 		if err != nil {
 			return errors.Wrap(err, "Error parsing message")
 		}
-		t.Logf("Parsed message (%T)", expectedMessage)
-		t.Logf("\n%s", expectedMessage)
+		t.Logf("Parsed message (%T)\n%[1]s", expectedMessage)
 
 		// Serialize the model into bytes
 		t.Log("Write to bytes")
@@ -312,11 +310,11 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 		expectedRawOutput := expectedWriteBuffer.GetBytes()
 		expectedRawOutputLength := uint32(len(expectedRawOutput))
 
-		now := time.Now()
+		startTransportPolling := time.Now()
 		// Read exactly this amount of bytes from the transport
-		t.Logf("Reading bytes (expectedRawOutputLength %d)", expectedRawOutputLength)
+		t.Logf("Reading bytes from transport instance (expectedRawOutputLength %d)", expectedRawOutputLength)
 		for testTransportInstance.GetNumDrainableBytes() < expectedRawOutputLength {
-			if time.Now().Sub(now) > 2*time.Second {
+			if time.Since(startTransportPolling) > 2*time.Second {
 				drainableBytes := testTransportInstance.GetNumDrainableBytes()
 				actualRawOutput := testTransportInstance.DrainWriteBuffer(drainableBytes)
 				return errors.Errorf("error getting bytes from transport. Not enough data available: actual(%d)<expected(%d), \nactual:   %#X\nexpected: %#X\nHexdumps:\n%s",
@@ -349,6 +347,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 				return errors.Errorf("actual output doesn't match expected output:\nactual:   %#X\nexpected: %#X\nHexdumps:\n%s", actualRawOutput, expectedRawOutput, utils.DiffHex(expectedRawOutput, actualRawOutput))
 			}
 		}
+		t.Log("outputs are matching")
 		// If there's a difference, parse the input and display it to simplify debugging
 	case StepTypeOutgoingPlcBytes:
 		// Read exactly this amount of bytes from the transport
@@ -378,8 +377,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 		if err != nil {
 			return errors.Wrap(err, "error parsing message")
 		}
-		t.Logf("Parsed message (%T)", expectedMessage)
-		t.Logf("\n%s", expectedMessage)
+		t.Logf("Parsed message (%T)\n%[1]s", expectedMessage)
 
 		// Serialize the model into bytes
 		t.Log("Serializing bytes")
@@ -399,9 +397,8 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 		}
 
 		// Send these bytes to the transport
-		t.Log("Writing to transport")
 		_bytes := wb.GetBytes()
-		t.Logf("\n%s", hex.Dump(_bytes))
+		t.Logf("Writing to transport\n%s", hex.Dump(_bytes))
 		testTransportInstance.FillReadBuffer(_bytes)
 	case StepTypeIncomingPlcBytes:
 		// Get the raw hex-data.
@@ -412,8 +409,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 		}
 
 		// Send these bytes to the transport
-		t.Log("Writing bytes to transport")
-		t.Logf("\n%s", hex.Dump(rawInput))
+		t.Logf("Writing bytes to transport\n%[1]s", hex.Dump(rawInput))
 		testTransportInstance.FillReadBuffer(rawInput)
 	case StepTypeDelay:
 		// Get the number of milliseconds
@@ -433,7 +429,7 @@ func (m DriverTestsuite) ExecuteStep(t *testing.T, connection plc4go.PlcConnecti
 			return errors.Wrap(err, "error closing transport")
 		}
 	}
-	t.Logf("\n-------------------------------------------------------\n - Finished step: %s after %vms \n-------------------------------------------------------", step.name, time.Now().Sub(start).Milliseconds())
+	t.Logf("\n-------------------------------------------------------\n - Finished step: %s after %sms \n-------------------------------------------------------", step.name, time.Since(start))
 	return nil
 }