106 lines
2.2 KiB
Go
106 lines
2.2 KiB
Go
package config
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func getShasum(path string) (string, error) {
|
|
hasher := sha256.New()
|
|
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer f.Close()
|
|
if _, err := io.Copy(hasher, f); err != nil {
|
|
return "", err
|
|
}
|
|
return hex.EncodeToString(hasher.Sum(nil)), nil
|
|
}
|
|
|
|
func TestParseConfig(t *testing.T) {
|
|
config, err := ReadConfig("testdata/valid-config.json")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if config.Sharing.IncludeASN == false {
|
|
t.Error("network should be included")
|
|
}
|
|
}
|
|
|
|
func TestUpdateConfig(t *testing.T) {
|
|
tmpFile, err := ioutil.TempFile(os.TempDir(), "ooniconfig-")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
configPath := tmpFile.Name()
|
|
defer os.Remove(configPath)
|
|
|
|
data, err := ioutil.ReadFile("testdata/config-v0.json")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = ioutil.WriteFile(configPath, data, 0644)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
origShasum, err := getShasum(configPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
config, err := ReadConfig(configPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
origIncludeIP := config.Sharing.IncludeIP
|
|
origIncludeASN := config.Sharing.IncludeASN
|
|
origUploadResults := config.Sharing.UploadResults
|
|
origInformedConsent := config.InformedConsent
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
config.MaybeMigrate()
|
|
migratedShasum, err := getShasum(configPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if migratedShasum == origShasum {
|
|
t.Fatal("the config was not migrated")
|
|
}
|
|
|
|
newConfig, err := ReadConfig(configPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if newConfig.Sharing.IncludeIP != origIncludeIP {
|
|
t.Error("includeIP differs")
|
|
}
|
|
if newConfig.Sharing.IncludeASN != origIncludeASN {
|
|
t.Error("includeASN differs")
|
|
}
|
|
if newConfig.Sharing.UploadResults != origUploadResults {
|
|
t.Error("UploadResults differs")
|
|
}
|
|
if newConfig.InformedConsent != origInformedConsent {
|
|
t.Error("InformedConsent differs")
|
|
}
|
|
|
|
// Check that the config file stays the same if it's already the most up to
|
|
// date version
|
|
config.MaybeMigrate()
|
|
finalShasum, err := getShasum(configPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if migratedShasum != finalShasum {
|
|
t.Fatal("the config was migrated again")
|
|
}
|
|
}
|