github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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/juju/mongo/utils" 8 "github.com/juju/testing" 9 gc "gopkg.in/check.v1" 10 ) 11 12 type dataCleansingSuite struct { 13 testing.IsolationSuite 14 } 15 16 var _ = gc.Suite(&dataCleansingSuite{}) 17 18 func (s *dataCleansingSuite) TestEscapeKeys_EscapesPeriods(c *gc.C) { 19 before := map[string]interface{}{ 20 "a.b": "c", 21 } 22 after := utils.EscapeKeys(before) 23 24 c.Check(after, gc.DeepEquals, map[string]interface{}{ 25 "a" + "\uff0e" + "b": "c", 26 }) 27 } 28 29 func (s *dataCleansingSuite) TestEscapeKeys_EscapesDollarSigns(c *gc.C) { 30 before := map[string]interface{}{ 31 "$a": "c", 32 } 33 after := utils.EscapeKeys(before) 34 35 c.Check(after, gc.DeepEquals, map[string]interface{}{ 36 "\uff04" + "a": "c", 37 }) 38 } 39 40 func (s *dataCleansingSuite) TestEscapeKeys_RecursivelyEscapes(c *gc.C) { 41 before := map[string]interface{}{ 42 "$a": "c", 43 "b": map[string]interface{}{ 44 "$foo.bar": "baz", 45 }, 46 } 47 after := utils.EscapeKeys(before) 48 49 c.Check(after, gc.DeepEquals, map[string]interface{}{ 50 "\uff04" + "a": "c", 51 "b": map[string]interface{}{ 52 "\uff04" + "foo" + "\uff0e" + "bar": "baz", 53 }, 54 }) 55 } 56 57 func (s *dataCleansingSuite) TestUnescapeKey_UnescapesPeriods(c *gc.C) { 58 before := map[string]interface{}{ 59 "a" + "\uff0e" + "b": "c", 60 } 61 after := utils.UnescapeKeys(before) 62 63 c.Check(after, gc.DeepEquals, map[string]interface{}{ 64 "a.b": "c", 65 }) 66 } 67 68 func (s *dataCleansingSuite) TestUnescapeKey_UnescapesDollarSigns(c *gc.C) { 69 before := map[string]interface{}{ 70 "\uff04" + "a": "c", 71 } 72 after := utils.UnescapeKeys(before) 73 74 c.Check(after, gc.DeepEquals, map[string]interface{}{ 75 "$a": "c", 76 }) 77 } 78 79 func (s *dataCleansingSuite) TestUnescapeKeys_RecursivelyUnescapes(c *gc.C) { 80 before := map[string]interface{}{ 81 "\uff04" + "a": "c", 82 "b": map[string]interface{}{ 83 "\uff04" + "foo" + "\uff0e" + "bar": "baz", 84 }, 85 } 86 after := utils.UnescapeKeys(before) 87 88 c.Check(after, gc.DeepEquals, map[string]interface{}{ 89 "$a": "c", 90 "b": map[string]interface{}{ 91 "$foo.bar": "baz", 92 }, 93 }) 94 } 95 96 func (s *dataCleansingSuite) TestEscapeString_EscapesPeriods(c *gc.C) { 97 c.Check("a"+"\uff0e"+"b", gc.Equals, utils.EscapeString("a.b")) 98 } 99 100 func (s *dataCleansingSuite) TestEscapeString_EscapesDollarSigns(c *gc.C) { 101 c.Check("\uff04"+"a", gc.Equals, utils.EscapeString("$a")) 102 } 103 104 func (s *dataCleansingSuite) TestUnescapeString_UnescapesPeriod(c *gc.C) { 105 c.Check(utils.UnescapeString("a"+"\uff0e"+"b"), gc.Equals, "a.b") 106 } 107 108 func (s *dataCleansingSuite) TestUnescapeString_UnescapesDollarSigns(c *gc.C) { 109 c.Check(utils.UnescapeString("\uff04"+"a"), gc.Equals, "$a") 110 }