targetparser_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package kube
  2. import (
  3. "net/url"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "google.golang.org/grpc/resolver"
  7. )
  8. func TestParseTarget(t *testing.T) {
  9. tests := []struct {
  10. name string
  11. input string
  12. expect Service
  13. hasErr bool
  14. }{
  15. {
  16. name: "normal case",
  17. input: "k8s://ns1/my-svc:8080",
  18. expect: Service{
  19. Namespace: "ns1",
  20. Name: "my-svc",
  21. Port: 8080,
  22. },
  23. },
  24. {
  25. name: "normal case",
  26. input: "k8s:///my-svc:8080",
  27. expect: Service{
  28. Namespace: defaultNamespace,
  29. Name: "my-svc",
  30. Port: 8080,
  31. },
  32. },
  33. {
  34. name: "no port",
  35. input: "k8s://ns1/my-svc:",
  36. hasErr: true,
  37. },
  38. {
  39. name: "no port, no colon",
  40. input: "k8s://ns1/my-svc",
  41. expect: Service{
  42. Namespace: "ns1",
  43. Name: "my-svc",
  44. },
  45. },
  46. {
  47. name: "bad port",
  48. input: "k8s://ns1/my-svc:800a",
  49. hasErr: true,
  50. },
  51. {
  52. name: "bad endpoint",
  53. input: "k8s://ns1:800/:",
  54. hasErr: true,
  55. },
  56. }
  57. for _, test := range tests {
  58. t.Run(test.name, func(t *testing.T) {
  59. uri, err := url.Parse(test.input)
  60. if assert.NoError(t, err) {
  61. svc, err := ParseTarget(resolver.Target{URL: *uri})
  62. if test.hasErr {
  63. assert.NotNil(t, err)
  64. } else {
  65. assert.Nil(t, err)
  66. assert.Equal(t, test.expect, svc)
  67. }
  68. }
  69. })
  70. }
  71. }