Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

119 wiersze
2.4 KiB

  1. // Copyright 2017, OpenCensus Authors
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package view
  15. import (
  16. "context"
  17. "testing"
  18. "go.opencensus.io/tag"
  19. )
  20. func TestEncodeDecodeTags(t *testing.T) {
  21. ctx := context.Background()
  22. type testData struct {
  23. m *tag.Map
  24. keys []tag.Key
  25. want map[tag.Key][]byte
  26. }
  27. k1, err := tag.NewKey("/encodedecodetest/k1")
  28. if err != nil {
  29. t.Fatal(err)
  30. }
  31. k2, err := tag.NewKey("/encodedecodetest/k2")
  32. if err != nil {
  33. t.Fatal(err)
  34. }
  35. k3, err := tag.NewKey("/encodedecodetest/k3")
  36. if err != nil {
  37. t.Fatal(err)
  38. }
  39. ctx1, _ := tag.New(ctx)
  40. ctx2, _ := tag.New(ctx, tag.Insert(k2, "v2"))
  41. ctx3, _ := tag.New(ctx, tag.Insert(k1, "v1"), tag.Insert(k2, "v2"))
  42. ctx4, _ := tag.New(ctx, tag.Insert(k1, "v1"), tag.Insert(k2, "v2"), tag.Insert(k3, "v3"))
  43. m1 := tag.FromContext(ctx1)
  44. m2 := tag.FromContext(ctx2)
  45. m3 := tag.FromContext(ctx3)
  46. m4 := tag.FromContext(ctx4)
  47. tests := []testData{
  48. {
  49. m1,
  50. []tag.Key{k1},
  51. nil,
  52. },
  53. {
  54. m2,
  55. []tag.Key{},
  56. nil,
  57. },
  58. {
  59. m2,
  60. []tag.Key{k1},
  61. nil,
  62. },
  63. {
  64. m2,
  65. []tag.Key{k2},
  66. map[tag.Key][]byte{
  67. k2: []byte("v2"),
  68. },
  69. },
  70. {
  71. m3,
  72. []tag.Key{k1},
  73. map[tag.Key][]byte{
  74. k1: []byte("v1"),
  75. },
  76. },
  77. {
  78. m3,
  79. []tag.Key{k1, k2},
  80. map[tag.Key][]byte{
  81. k1: []byte("v1"),
  82. k2: []byte("v2"),
  83. },
  84. },
  85. {
  86. m4,
  87. []tag.Key{k3, k1},
  88. map[tag.Key][]byte{
  89. k1: []byte("v1"),
  90. k3: []byte("v3"),
  91. },
  92. },
  93. }
  94. for label, tt := range tests {
  95. tags := decodeTags(encodeWithKeys(tt.m, tt.keys), tt.keys)
  96. if got, want := len(tags), len(tt.want); got != want {
  97. t.Fatalf("%d: len(decoded) = %v; not %v", label, got, want)
  98. }
  99. for _, tag := range tags {
  100. if _, ok := tt.want[tag.Key]; !ok {
  101. t.Errorf("%d: missing key %v", label, tag.Key)
  102. }
  103. if got, want := tag.Value, string(tt.want[tag.Key]); got != want {
  104. t.Errorf("%d: got value %q; want %q", label, got, want)
  105. }
  106. }
  107. }
  108. }