ooni-probe-cli/config/parser_test.go
Arturo Filastò 8a27de6c7d
Remove all settings which are not implemented (#73)
* Remove all settings which are not implemented

* Add support for migrating config files from version 0 -> 1

Add basic unittests for the config file migration

* Update the config file used by travis

* Fix typos in console log messages

* Improve the comment

* Fix type of limit

* Set informed consent to true in the travis config
2019-11-14 17:58:31 +01:00

111 lines
2.3 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.IncludeCountry == false {
t.Error("country 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
origIncludeCountry := config.Sharing.IncludeCountry
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.IncludeCountry != origIncludeCountry {
t.Error("includeCountry 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")
}
}