Skip to content

fix: data race on Systray.SetCurrentConfigFile #1012

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 18 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
90cce2c
fix
dido18 Jan 20, 2025
c96490b
feat(config): add default configuration file and update config handling
dido18 Jan 21, 2025
7b4859a
fix(.gitignore): add entry to ignore config.ini file
dido18 Jan 21, 2025
279de2a
test(config): add test for writing default config.ini file and update…
dido18 Jan 21, 2025
4f3ac5a
test(config): add tests for retrieving config paths from XDG_CONFIG_H…
dido18 Jan 21, 2025
c41b815
feat(config): pass config path to main loop and update handling
dido18 Jan 22, 2025
716e8fc
refactor(config): revert to use the `config.ini` to default and remo…
dido18 Jan 29, 2025
29a1bf3
refactor(config): remove default config file and update related tests
dido18 Jan 29, 2025
9143b02
feat(config): skip tests if not linux
dido18 Jan 29, 2025
e4e926e
feat(tests): add .gitignore for test data directories
dido18 Jan 29, 2025
3dfa496
fix(tests): handle error when removing config file in test
dido18 Jan 29, 2025
aaa97f9
refactor(main): remove debug print statement for config path
dido18 Jan 29, 2025
f5a9afc
feat(tests): enhance config tests with ini name checks and update tes…
dido18 Jan 29, 2025
9889825
feat(config): update error handling in GetConfigPath and add test for…
dido18 Jan 29, 2025
a8bcfe7
fix(tests): correct ini name in TestGetConfigPathFromHOME test case
dido18 Jan 29, 2025
a0bd3fd
feat(tests): rename tests of config
dido18 Jan 29, 2025
504ce7e
refactor(tests): rename test functions for consistency and clarity
dido18 Jan 29, 2025
870fac5
fix(tests): simplify cleanup in TestIfHomeDoesNotContainConfigTheDefa…
dido18 Jan 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat(tests): rename tests of config
  • Loading branch information
dido18 committed Jan 29, 2025
commit a0bd3fdb5e2ce56f9641a4cb2bab3d02db49d475
122 changes: 122 additions & 0 deletions config/config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package config

import (
"fmt"
"os"
"runtime"
"testing"

"github.com/arduino/go-paths-helper"
"github.com/go-ini/ini"
"github.com/stretchr/testify/assert"
)

// TestGetConfigPathFromXDG_CONFIG_HOME tests the case when the config.ini is read from XDG_CONFIG_HOME/ArduinoCreateAgent/config.ini
func TestGetConfigPathFromXDG_CONFIG_HOME(t *testing.T) {

Check failure on line 15 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathFromXDG_CONFIG_HOME redeclared in this block

Check failure on line 15 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathFromXDG_CONFIG_HOME redeclared in this block
if runtime.GOOS != "linux" {
t.Skip("Skipping test on non-linux OS")
}
// read config from $XDG_CONFIG_HOME/ArduinoCreateAgent/config.ini
os.Setenv("XDG_CONFIG_HOME", "./testdata/fromxdghome")
defer os.Unsetenv("XDG_CONFIG_HOME")
configPath := GetConfigPath()

assert.Equal(t, "testdata/fromxdghome/ArduinoCreateAgent/config.ini", configPath.String())
checkIniName(t, configPath, "this-is-a-config-file-from-xdghome-dir")
}

// TestGetConfigPathFromHOME tests the case when the config.ini is read from $HOME/.config/ArduinoCreateAgent/config.ini
func TestGetConfigPathFromHOME(t *testing.T) {

Check failure on line 29 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathFromHOME redeclared in this block

Check failure on line 29 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathFromHOME redeclared in this block
if runtime.GOOS != "linux" {
t.Skip("Skipping test on non-linux OS")
}
os.Setenv("HOME", "./testdata/fromhome")
defer os.Unsetenv("HOME")
configPath := GetConfigPath()

assert.Equal(t, "testdata/fromhome/.config/ArduinoCreateAgent/config.ini", configPath.String())
checkIniName(t, configPath, "this-is-a-config-file-from-home-dir")
}

// TestGetConfigPathFromARDUINO_CREATE_AGENT_CONFIG tests the case when the config.ini is read from ARDUINO_CREATE_AGENT_CONFIG env variable
func TestGetConfigPathFromARDUINO_CREATE_AGENT_CONFIG(t *testing.T) {

Check failure on line 42 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathFromARDUINO_CREATE_AGENT_CONFIG redeclared in this block

Check failure on line 42 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathFromARDUINO_CREATE_AGENT_CONFIG redeclared in this block
if runtime.GOOS != "linux" {
t.Skip("Skipping test on non-linux OS")
}
// $HOME must be always set, otherwise panic
os.Setenv("HOME", "./testdata/dummyhome")

os.Setenv("ARDUINO_CREATE_AGENT_CONFIG", "./testdata/from-arduino-create-agent-config-env/config.ini")
defer os.Unsetenv("ARDUINO_CREATE_AGENT_CONFIG")

configPath := GetConfigPath()
assert.Equal(t, "./testdata/from-arduino-create-agent-config-env/config.ini", configPath.String())
checkIniName(t, configPath, "this-is-a-config-file-from-home-dir-from-ARDUINO_CREATE_AGENT_CONFIG-env")
}

// TestIfHomeDoesNotContainConfigTheDefaultConfigAreCopied tests the case when the default config.ini is copied into $HOME/.config/ArduinoCreateAgent/config.ini
// from the default config.ini
// If the ARDUINO_CREATE_AGENT_CONFIG is NOT set and the config.ini does not exist in HOME directory
// then it copies the default config (the config.ini) into the HOME directory
func TestIfHomeDoesNotContainConfigTheDefaultConfigAreCopied(t *testing.T) {

Check failure on line 61 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestIfHomeDoesNotContainConfigTheDefaultConfigAreCopied redeclared in this block

Check failure on line 61 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestIfHomeDoesNotContainConfigTheDefaultConfigAreCopied redeclared in this block
if runtime.GOOS != "linux" {
t.Skip("Skipping test on non-linux OS")
}
// $HOME must be always set, otherwise panic
os.Setenv("HOME", "./testdata/home-without-config")

os.Unsetenv("ARDUINO_CREATE_AGENT_CONFIG")
// we want to test the case when the config does not exist in the home directory
err := os.Remove("./testdata/home-without-config/.config/ArduinoCreateAgent/config.ini")
if err != nil {
t.Fatal(err)
}

configPath := GetConfigPath()

assert.Equal(t, "testdata/home-without-config/.config/ArduinoCreateAgent/config.ini", configPath.String())
checkIniName(t, configPath, "") // the name of the default config is missing (an empty string)

givenContent, err := paths.New(configPath.String()).ReadFile()
if err != nil {
t.Fatal(err)
}

assert.Equal(t, string(configContent), string(givenContent))
}

// TestGetConfigPathPanicIfPathDoesNotExist tests that it panics if the ARDUINO_CREATE_AGENT_CONFIG env variable point to an non-existing path
func TestGetConfigPathPanicIfPathDoesNotExist(t *testing.T) {

Check failure on line 89 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathPanicIfPathDoesNotExist redeclared in this block

Check failure on line 89 in config/config_test.go

View workflow job for this annotation

GitHub Actions / test (./ - ubuntu-latest)

TestGetConfigPathPanicIfPathDoesNotExist redeclared in this block
if runtime.GOOS != "linux" {
t.Skip("Skipping test on non-linux OS")
}
os.Setenv("HOME", "./testdata/dummyhome")
defer os.Unsetenv("HOME")

os.Setenv("ARDUINO_CREATE_AGENT_CONFIG", "./testdata/a-not-existing-path/config.ini")

defer func() {
if r := recover(); r != nil {
assert.Equal(t, fmt.Sprintf("config from env var %s does not exists", "./testdata/a-not-existing-path/config.ini"), r)
} else {
t.Fatal("Expected panic but did not occur")
}
}()

configPath := GetConfigPath()

assert.Equal(t, "testdata/fromxdghome/ArduinoCreateAgent/config.ini", configPath.String())
checkIniName(t, configPath, "this-is-a-config-file-from-xdghome-dir")
}

func checkIniName(t *testing.T, confipath *paths.Path, expected string) {
cfg, err := ini.LoadSources(ini.LoadOptions{IgnoreInlineComment: true, AllowPythonMultilineValues: true}, confipath.String())
if err != nil {
t.Fatal(err)
}
defaultSection, err := cfg.GetSection("")
if err != nil {
t.Fatal(err)
}
assert.Equal(t, expected, defaultSection.Key("name").String())
}
Loading