You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

103 lines
2.9 KiB

  1. package decoder
  2. import (
  3. "testing"
  4. "github.com/AFASystems/presence/internal/pkg/model"
  5. )
  6. func newParserRegistry() *model.ParserRegistry {
  7. return &model.ParserRegistry{ParserList: make(map[string]model.BeaconParser)}
  8. }
  9. func TestParserRegistry_AddParser(t *testing.T) {
  10. registry := newParserRegistry()
  11. config := model.Config{
  12. Name: "test-parser",
  13. Min: 4,
  14. Max: 20,
  15. Pattern: []string{"0x02", "0x01"},
  16. Configs: map[string]model.ParserConfig{},
  17. }
  18. registry.Register("test-parser", config)
  19. if len(registry.ParserList) != 1 {
  20. t.Errorf("Expected 1 parser in registry, got %d", len(registry.ParserList))
  21. }
  22. if _, exists := registry.ParserList["test-parser"]; !exists {
  23. t.Error("Parser 'test-parser' should exist in registry")
  24. }
  25. }
  26. func TestParserRegistry_RemoveParser(t *testing.T) {
  27. registry := newParserRegistry()
  28. config := model.Config{Name: "test-parser", Min: 2, Max: 10, Pattern: []string{"0x02"}}
  29. registry.Register("test-parser", config)
  30. registry.Unregister("test-parser")
  31. if len(registry.ParserList) != 0 {
  32. t.Errorf("Expected 0 parsers in registry, got %d", len(registry.ParserList))
  33. }
  34. if _, exists := registry.ParserList["test-parser"]; exists {
  35. t.Error("Parser 'test-parser' should not exist in registry")
  36. }
  37. }
  38. func TestParserRegistry_UpdateParser(t *testing.T) {
  39. registry := newParserRegistry()
  40. config1 := model.Config{Name: "test-parser", Min: 2, Max: 10, Pattern: []string{"0x02"}}
  41. config2 := model.Config{Name: "test-parser", Min: 5, Max: 15, Pattern: []string{"0x03"}}
  42. registry.Register("test-parser", config1)
  43. registry.Register("test-parser", config2)
  44. if len(registry.ParserList) != 1 {
  45. t.Errorf("Expected 1 parser in registry, got %d", len(registry.ParserList))
  46. }
  47. if _, exists := registry.ParserList["test-parser"]; !exists {
  48. t.Error("Parser 'test-parser' should exist in registry")
  49. }
  50. }
  51. func TestParserRegistry_MultipleParsers(t *testing.T) {
  52. registry := newParserRegistry()
  53. parsers := []model.Config{
  54. {Name: "parser-1", Min: 2, Max: 10, Pattern: []string{"0x02"}},
  55. {Name: "parser-2", Min: 3, Max: 15, Pattern: []string{"0x03"}},
  56. {Name: "parser-3", Min: 4, Max: 20, Pattern: []string{"0x04"}},
  57. }
  58. for _, p := range parsers {
  59. registry.Register(p.Name, p)
  60. }
  61. if len(registry.ParserList) != 3 {
  62. t.Errorf("Expected 3 parsers in registry, got %d", len(registry.ParserList))
  63. }
  64. for _, p := range parsers {
  65. if _, exists := registry.ParserList[p.Name]; !exists {
  66. t.Errorf("Parser '%s' should exist in registry", p.Name)
  67. }
  68. }
  69. }
  70. func TestParserRegistry_RemoveNonExistent(t *testing.T) {
  71. registry := newParserRegistry()
  72. registry.Unregister("non-existent")
  73. if len(registry.ParserList) != 0 {
  74. t.Errorf("Expected 0 parsers, got %d", len(registry.ParserList))
  75. }
  76. }
  77. func TestParserRegistry_EmptyRegistry(t *testing.T) {
  78. registry := newParserRegistry()
  79. if len(registry.ParserList) != 0 {
  80. t.Errorf("Expected empty registry, got %d parsers", len(registry.ParserList))
  81. }
  82. registry.Unregister("anything")
  83. }