You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by jr...@apache.org on 2024/07/01 13:20:39 UTC

(beam) branch master updated: Add a unit test for MakePipelineOptionsFileAndEnvVar (#31732)

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

jrmccluskey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new bae6fcfcb49 Add a unit test for MakePipelineOptionsFileAndEnvVar (#31732)
bae6fcfcb49 is described below

commit bae6fcfcb492db64e8b7333d928fdbecdcb3e21f
Author: ljjulia <li...@google.com>
AuthorDate: Mon Jul 1 06:20:33 2024 -0700

    Add a unit test for MakePipelineOptionsFileAndEnvVar (#31732)
    
    * Add unit test for MakePipelineOptionsFileAndEnvVar
    
    * Add coverage for validating options string is JSON
---
 sdks/go/container/tools/pipeline_options.go        |  5 +++
 ...ipeline_options.go => pipeline_options_test.go} | 49 +++++++++++++++-------
 2 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/sdks/go/container/tools/pipeline_options.go b/sdks/go/container/tools/pipeline_options.go
index 7b46d8fa8c8..026fb31b099 100644
--- a/sdks/go/container/tools/pipeline_options.go
+++ b/sdks/go/container/tools/pipeline_options.go
@@ -16,6 +16,7 @@
 package tools
 
 import (
+	"encoding/json"
 	"fmt"
 	"os"
 )
@@ -31,6 +32,10 @@ func MakePipelineOptionsFileAndEnvVar(options string) error {
 		return fmt.Errorf("unable to create %v: %w", fn, err)
 	}
 	defer f.Close()
+	var js map[string]interface{}
+	if json.Unmarshal([]byte(options), &js) != nil {
+		return fmt.Errorf("options string is not JSON formatted %v", options)
+	}
 	if _, err := f.WriteString(options); err != nil {
 		return fmt.Errorf("error writing %v: %w", f.Name(), err)
 	}
diff --git a/sdks/go/container/tools/pipeline_options.go b/sdks/go/container/tools/pipeline_options_test.go
similarity index 54%
copy from sdks/go/container/tools/pipeline_options.go
copy to sdks/go/container/tools/pipeline_options_test.go
index 7b46d8fa8c8..7a0d7ebd5f0 100644
--- a/sdks/go/container/tools/pipeline_options.go
+++ b/sdks/go/container/tools/pipeline_options_test.go
@@ -16,24 +16,43 @@
 package tools
 
 import (
-	"fmt"
 	"os"
+	"testing"
 )
 
-// MakePipelineOptionsFileAndEnvVar writes the pipeline options to a file.
-// Assumes the options string is JSON formatted.
-//
-// Stores the file name in question in PIPELINE_OPTIONS_FILE for access by the SDK.
-func MakePipelineOptionsFileAndEnvVar(options string) error {
-	fn := "pipeline_options.json"
-	f, err := os.Create(fn)
-	if err != nil {
-		return fmt.Errorf("unable to create %v: %w", fn, err)
+func TestMakePipelineOptionsFileAndEnvVar(t *testing.T) {
+	tests := []struct {
+		name          string
+		inputOptions  string
+		expectedError string
+	}{
+		{
+			"empty options",
+			"{}",
+			"",
+		},
+		{
+			"valid options",
+			"{\"abc\": 123}",
+			"",
+		},
+		{
+			"invalid options",
+			"{4}",
+			"options string is not JSON formatted {4}",
+		},
 	}
-	defer f.Close()
-	if _, err := f.WriteString(options); err != nil {
-		return fmt.Errorf("error writing %v: %w", f.Name(), err)
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			t.Cleanup(os.Clearenv)
+			err := MakePipelineOptionsFileAndEnvVar(test.inputOptions)
+			if err != nil {
+				if got, want := err.Error(), test.expectedError; got != want {
+					t.Errorf("got error: %v, want error: %v", got, want)
+				}
+			}
+		})
 	}
-	os.Setenv("PIPELINE_OPTIONS_FILE", f.Name())
-	return nil
+	os.Remove("pipeline_options.json")
 }