Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

set_test.go 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright (c) 2017 Daniel Oaks <daniel@danieloaks.net>
  2. // released under the MIT license
  3. package caps
  4. import (
  5. "fmt"
  6. "reflect"
  7. "testing"
  8. )
  9. func TestSets(t *testing.T) {
  10. s1 := NewSet()
  11. s1.Enable(AccountTag, EchoMessage, UserhostInNames)
  12. if !(s1.Has(AccountTag) && s1.Has(EchoMessage) && s1.Has(UserhostInNames)) {
  13. t.Error("Did not have the tags we expected")
  14. }
  15. if s1.Has(STS) {
  16. t.Error("Has() returned true when we don't have the given capability")
  17. }
  18. s1.Disable(AccountTag)
  19. if s1.Has(AccountTag) {
  20. t.Error("Disable() did not correctly disable the given capability")
  21. }
  22. enabledCaps := NewSet()
  23. enabledCaps.Union(s1)
  24. expectedCaps := NewSet(EchoMessage, UserhostInNames)
  25. if !reflect.DeepEqual(enabledCaps, expectedCaps) {
  26. t.Errorf("Enabled and expected capability lists do not match: %v, %v", enabledCaps, expectedCaps)
  27. }
  28. // make sure re-enabling doesn't add to the count or something weird like that
  29. s1.Enable(EchoMessage)
  30. // make sure add and remove work fine
  31. s1.Add(InviteNotify)
  32. s1.Remove(EchoMessage)
  33. if !s1.Has(InviteNotify) || s1.Has(EchoMessage) {
  34. t.Error("Add/Remove don't work")
  35. }
  36. // test Strings()
  37. values := make(Values)
  38. values[InviteNotify] = "invitemepls"
  39. actualCap301ValuesString := s1.Strings(Cap301, values, 0)
  40. expectedCap301ValuesString := []string{"invite-notify userhost-in-names"}
  41. if !reflect.DeepEqual(actualCap301ValuesString, expectedCap301ValuesString) {
  42. t.Errorf("Generated Cap301 values string [%v] did not match expected values string [%v]", actualCap301ValuesString, expectedCap301ValuesString)
  43. }
  44. actualCap302ValuesString := s1.Strings(Cap302, values, 0)
  45. expectedCap302ValuesString := []string{"invite-notify=invitemepls userhost-in-names"}
  46. if !reflect.DeepEqual(actualCap302ValuesString, expectedCap302ValuesString) {
  47. t.Errorf("Generated Cap302 values string [%s] did not match expected values string [%s]", actualCap302ValuesString, expectedCap302ValuesString)
  48. }
  49. }
  50. func assertEqual(found, expected interface{}) {
  51. if !reflect.DeepEqual(found, expected) {
  52. panic(fmt.Sprintf("found %#v, expected %#v", found, expected))
  53. }
  54. }
  55. func Test301WhitelistNotRespectedFor302(t *testing.T) {
  56. s1 := NewSet()
  57. s1.Enable(AccountTag, EchoMessage, StandardReplies)
  58. assertEqual(s1.Strings(Cap301, nil, 0), []string{"account-tag echo-message"})
  59. assertEqual(s1.Strings(Cap302, nil, 0), []string{"account-tag echo-message standard-replies"})
  60. }
  61. func TestSubtract(t *testing.T) {
  62. s1 := NewSet(AccountTag, EchoMessage, UserhostInNames, ServerTime)
  63. toRemove := NewSet(UserhostInNames, EchoMessage)
  64. s1.Subtract(toRemove)
  65. if !reflect.DeepEqual(s1, NewSet(AccountTag, ServerTime)) {
  66. t.Errorf("subtract doesn't work")
  67. }
  68. }
  69. func BenchmarkSetReads(b *testing.B) {
  70. set := NewSet(UserhostInNames, EchoMessage)
  71. b.ResetTimer()
  72. for i := 0; i < b.N; i++ {
  73. set.Has(UserhostInNames)
  74. set.Has(LabeledResponse)
  75. set.Has(EchoMessage)
  76. set.Has(Nope)
  77. }
  78. }
  79. func BenchmarkSetWrites(b *testing.B) {
  80. for i := 0; i < b.N; i++ {
  81. set := NewSet(UserhostInNames, EchoMessage)
  82. set.Add(Nope)
  83. set.Add(ExtendedJoin)
  84. set.Remove(UserhostInNames)
  85. set.Remove(LabeledResponse)
  86. }
  87. }