github.com/safing/portbase@v0.19.5/config/persistence_test.go (about)

     1  package config
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"testing"
     7  )
     8  
     9  var (
    10  	jsonData = `{
    11    "a": "b",
    12    "c": {
    13      "d": "e",
    14      "f": "g",
    15      "h": {
    16        "i": "j",
    17        "k": "l",
    18        "m": {
    19          "n": "o"
    20        }
    21      }
    22    },
    23    "p": "q"
    24  }`
    25  	jsonBytes = []byte(jsonData)
    26  
    27  	mapData = map[string]interface{}{
    28  		"a":       "b",
    29  		"p":       "q",
    30  		"c/d":     "e",
    31  		"c/f":     "g",
    32  		"c/h/i":   "j",
    33  		"c/h/k":   "l",
    34  		"c/h/m/n": "o",
    35  	}
    36  )
    37  
    38  func TestJSONMapConversion(t *testing.T) {
    39  	t.Parallel()
    40  
    41  	// convert to json
    42  	j, err := MapToJSON(mapData)
    43  	if err != nil {
    44  		t.Fatal(err)
    45  	}
    46  
    47  	// check if to json matches
    48  	if !bytes.Equal(jsonBytes, j) {
    49  		t.Errorf("json does not match, got %s", j)
    50  	}
    51  
    52  	// convert to map
    53  	m, err := JSONToMap(jsonBytes)
    54  	if err != nil {
    55  		t.Fatal(err)
    56  	}
    57  
    58  	// and back
    59  	j2, err := MapToJSON(m)
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  
    64  	// check if double convert matches
    65  	if !bytes.Equal(jsonBytes, j2) {
    66  		t.Errorf("json does not match, got %s", j)
    67  	}
    68  }
    69  
    70  func TestConfigCleaning(t *testing.T) {
    71  	t.Parallel()
    72  
    73  	// load
    74  	configFlat, err := JSONToMap(jsonBytes)
    75  	if err != nil {
    76  		t.Fatal(err)
    77  	}
    78  
    79  	// clean everything
    80  	CleanFlattenedConfig(configFlat)
    81  	if len(configFlat) != 0 {
    82  		t.Errorf("should be empty: %+v", configFlat)
    83  	}
    84  
    85  	// load manuall for hierarchical config
    86  	configHier := make(map[string]interface{})
    87  	err = json.Unmarshal(jsonBytes, &configHier)
    88  	if err != nil {
    89  		t.Fatal(err)
    90  	}
    91  
    92  	// clean everything
    93  	CleanHierarchicalConfig(configHier)
    94  	if len(configHier) != 0 {
    95  		t.Errorf("should be empty: %+v", configHier)
    96  	}
    97  }