fb2ca32004
We are working on ooniprobe for Debian. Before starting to apply changes to the codebase, I'd like to apply some refactoring steps that I've been thinking about for quite some time. The general concept here is that the purpose of this repository changed since it was designed and now there is probe-engine which is a library, therefore, this repo can be mostly private.
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")
|
|
}
|
|
}
|