Skip to content

Commit

Permalink
Add tests for MONGO_SERVER_URL rotation
Browse files Browse the repository at this point in the history
  • Loading branch information
concaf committed May 6, 2024
1 parent b4230b7 commit ca0580f
Show file tree
Hide file tree
Showing 2 changed files with 160 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pkg/chains/storage/docdb/docdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,6 @@ func populateMongoServerURL(ctx context.Context, cfg config.Config) error {

func setMongoServerURLFromDir(ctx context.Context, dir string) error {
logger := logging.FromContext(ctx)

mongoEnv := "MONGO_SERVER_URL"

stat, err := os.Stat(dir)
Expand All @@ -287,6 +286,7 @@ func setMongoServerURLFromDir(ctx context.Context, dir string) error {
if err := os.MkdirAll(dir, 0755); err != nil {
return err
}
return nil
} else {

Check warning on line 290 in pkg/chains/storage/docdb/docdb.go

View workflow job for this annotation

GitHub Actions / lint

indent-error-flow: if block ends with a return statement, so drop this else and outdent its block (revive)
return err
}
Expand Down
159 changes: 159 additions & 0 deletions pkg/chains/storage/docdb/docdb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ package docdb

import (
"encoding/json"
"os"
"path/filepath"
"testing"

"github.com/tektoncd/chains/pkg/chains/objects"
Expand Down Expand Up @@ -117,3 +119,160 @@ func TestBackend_StorePayload(t *testing.T) {
})
}
}

func TestPopulateMongoServerURL(t *testing.T) {
mongoDir := t.TempDir()
mongoEnvFromFile := "mongoEnvFromFile"
if err := os.WriteFile(filepath.Join(mongoDir, "MONGO_SERVER_URL"), []byte(mongoEnvFromFile), 0644); err != nil {
t.Fatal(err)
}

tests := []struct {
name string
cfg config.Config
setMongoEnv string
expectedMongoEnv string
wantErr bool
}{
{
name: "fail when MONGO_SERVER_URL is not set but storage.docdb.url is set",
cfg: config.Config{
Storage: config.StorageConfigs{
DocDB: config.DocDBStorageConfig{
URL: "mongo://chainsdb/chainscollection?id_field=name",
},
},
},
wantErr: true,
},
{
name: "pass when MONGO_SERVER_URL is set and storage.docdb.url is set",
cfg: config.Config{
Storage: config.StorageConfigs{
DocDB: config.DocDBStorageConfig{
URL: "mongo://chainsdb/chainscollection?id_field=name",
},
},
},
setMongoEnv: "testEnv",
expectedMongoEnv: "testEnv",
wantErr: false,
},
{
name: "storage.docdb.mongo-server-url has more precedence than MONGO_SERVER_URL",
cfg: config.Config{
Storage: config.StorageConfigs{
DocDB: config.DocDBStorageConfig{
URL: "mongo://chainsdb/chainscollection?id_field=name",
MongoServerURL: "envFromConfig",
},
},
},
setMongoEnv: "testEnv",
expectedMongoEnv: "envFromConfig",
wantErr: false,
},
{
name: "storage.docdb.mongo-server-url works solo",
cfg: config.Config{
Storage: config.StorageConfigs{
DocDB: config.DocDBStorageConfig{
URL: "mongo://chainsdb/chainscollection?id_field=name",
MongoServerURL: "envFromConfigSolo",
},
},
},
setMongoEnv: "",
expectedMongoEnv: "envFromConfigSolo",
wantErr: false,
},
{
name: "storage.docdb.mongo-server-url-dir has precedence over storage.docdb.mongo-server-url and MONGO_SERVER_URL",
cfg: config.Config{
Storage: config.StorageConfigs{
DocDB: config.DocDBStorageConfig{
URL: "mongo://chainsdb/chainscollection?id_field=name",
MongoServerURLDir: mongoDir,
MongoServerURL: "envFromConfig",
},
},
},
setMongoEnv: "mongoEnvVar",
expectedMongoEnv: mongoEnvFromFile,
wantErr: false,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer os.Unsetenv("MONGO_SERVER_URL")
ctx, _ := rtesting.SetupFakeContext(t)

if tt.setMongoEnv != "" {
if err := os.Setenv("MONGO_SERVER_URL", tt.setMongoEnv); err != nil {
t.Error(err)
}
}

if err := populateMongoServerURL(ctx, tt.cfg); (err != nil) != tt.wantErr {
t.Errorf("did not expect an error, but got: %v", err)
}

currentMongoEnv := os.Getenv("MONGO_SERVER_URL")
if os.Getenv("MONGO_SERVER_URL") != tt.expectedMongoEnv {
t.Errorf("expected MONGO_SERVER_URL to be: %s, but got: %s", tt.expectedMongoEnv, currentMongoEnv)
}
})
}
}
func TestSetMongoServerURLFromDir(t *testing.T) {
mongoDir := t.TempDir()
mongoEnvFromFile := "mongoEnvFromFile"
if err := os.WriteFile(filepath.Join(mongoDir, "MONGO_SERVER_URL"), []byte(mongoEnvFromFile), 0644); err != nil {
t.Fatal(err)
}

if err := os.WriteFile(filepath.Join(mongoDir, "just-a-file"), []byte("just-a-file"), 0644); err != nil {
t.Fatal(err)
}

tests := []struct {
name string
directory string
expectedMongoEnv string
wantErr bool
}{
{
name: "error if path is not a directory",
directory: filepath.Join(filepath.Join(mongoDir, "just-a-file")),

Check failure on line 247 in pkg/chains/storage/docdb/docdb_test.go

View workflow job for this annotation

GitHub Actions / lint

badCall: suspicious Join on 1 argument (gocritic)
wantErr: true,
},
{
name: "verify if MONGO_SERVER_URL is being set from path",
directory: mongoDir,
expectedMongoEnv: mongoEnvFromFile,
wantErr: false,
},
{
name: "no error if path does not exist (it will be created)",
directory: filepath.Join(mongoDir, "does-not-exist"),
wantErr: false,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer os.Unsetenv("MONGO_SERVER_URL")
ctx, _ := rtesting.SetupFakeContext(t)

if err := setMongoServerURLFromDir(ctx, tt.directory); (err != nil) != tt.wantErr {
t.Errorf("did not expect an error, but got: %v", err)
}

currentEnv := os.Getenv("MONGO_SERVER_URL")
if currentEnv != tt.expectedMongoEnv {
t.Errorf("expected MONGO_SERVER_URL: %s, got %s", tt.expectedMongoEnv, currentEnv)
}
})
}
}

0 comments on commit ca0580f

Please sign in to comment.