github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/mongo/utils/data_cleansing_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package utils_test 5 6 import ( 7 "github.com/juju/testing" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/mongo/utils" 11 ) 12 13 type dataCleansingSuite struct { 14 testing.IsolationSuite 15 } 16 17 var _ = gc.Suite(&dataCleansingSuite{}) 18 19 func (s *dataCleansingSuite) TestEscapeKeys_EscapesPeriods(c *gc.C) { 20 before := map[string]interface{}{ 21 "a.b": "c", 22 } 23 after := utils.EscapeKeys(before) 24 25 c.Check(after, gc.DeepEquals, map[string]interface{}{ 26 "a" + "\uff0e" + "b": "c", 27 }) 28 } 29 30 func (s *dataCleansingSuite) TestEscapeKeys_EscapesDollarSigns(c *gc.C) { 31 before := map[string]interface{}{ 32 "$a": "c", 33 } 34 after := utils.EscapeKeys(before) 35 36 c.Check(after, gc.DeepEquals, map[string]interface{}{ 37 "\uff04" + "a": "c", 38 }) 39 } 40 41 func (s *dataCleansingSuite) TestEscapeKeys_RecursivelyEscapes(c *gc.C) { 42 before := map[string]interface{}{ 43 "$a": "c", 44 "b": map[string]interface{}{ 45 "$foo.bar": "baz", 46 }, 47 } 48 after := utils.EscapeKeys(before) 49 50 c.Check(after, gc.DeepEquals, map[string]interface{}{ 51 "\uff04" + "a": "c", 52 "b": map[string]interface{}{ 53 "\uff04" + "foo" + "\uff0e" + "bar": "baz", 54 }, 55 }) 56 } 57 58 func (s *dataCleansingSuite) TestUnescapeKey_UnescapesPeriods(c *gc.C) { 59 before := map[string]interface{}{ 60 "a" + "\uff0e" + "b": "c", 61 } 62 after := utils.UnescapeKeys(before) 63 64 c.Check(after, gc.DeepEquals, map[string]interface{}{ 65 "a.b": "c", 66 }) 67 } 68 69 func (s *dataCleansingSuite) TestUnescapeKeys_UnescapesDollarSigns(c *gc.C) { 70 before := map[string]interface{}{ 71 "\uff04" + "a": "c", 72 } 73 after := utils.UnescapeKeys(before) 74 75 c.Check(after, gc.DeepEquals, map[string]interface{}{ 76 "$a": "c", 77 }) 78 } 79 80 func (s *dataCleansingSuite) TestUnescapeKeys_RecursivelyUnescapes(c *gc.C) { 81 before := map[string]interface{}{ 82 "\uff04" + "a": "c", 83 "b": map[string]interface{}{ 84 "\uff04" + "foo" + "\uff0e" + "bar": "baz", 85 }, 86 } 87 after := utils.UnescapeKeys(before) 88 89 c.Check(after, gc.DeepEquals, map[string]interface{}{ 90 "$a": "c", 91 "b": map[string]interface{}{ 92 "$foo.bar": "baz", 93 }, 94 }) 95 } 96 97 func (s *dataCleansingSuite) TestEscapeKey_EscapesPeriods(c *gc.C) { 98 c.Check("a"+"\uff0e"+"b", gc.Equals, utils.EscapeKey("a.b")) 99 } 100 101 func (s *dataCleansingSuite) TestEscapeKey_EscapesDollarSigns(c *gc.C) { 102 c.Check("\uff04"+"a", gc.Equals, utils.EscapeKey("$a")) 103 } 104 105 func (s *dataCleansingSuite) TestUnescapeKey_UnescapesPeriod(c *gc.C) { 106 c.Check(utils.UnescapeKey("a"+"\uff0e"+"b"), gc.Equals, "a.b") 107 } 108 109 func (s *dataCleansingSuite) TestUnescapeKey_UnescapesDollarSigns(c *gc.C) { 110 c.Check(utils.UnescapeKey("\uff04"+"a"), gc.Equals, "$a") 111 }