envvars_test.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /*
  2. Copyright 2014 The Kubernetes Authors.
  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. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package envvars_test
  14. import (
  15. "reflect"
  16. "testing"
  17. "k8s.io/api/core/v1"
  18. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  19. "k8s.io/kubernetes/pkg/kubelet/envvars"
  20. )
  21. func TestFromServices(t *testing.T) {
  22. sl := []*v1.Service{
  23. {
  24. ObjectMeta: metav1.ObjectMeta{Name: "foo-bar"},
  25. Spec: v1.ServiceSpec{
  26. Selector: map[string]string{"bar": "baz"},
  27. ClusterIP: "1.2.3.4",
  28. Ports: []v1.ServicePort{
  29. {Port: 8080, Protocol: "TCP"},
  30. },
  31. },
  32. },
  33. {
  34. ObjectMeta: metav1.ObjectMeta{Name: "abc-123"},
  35. Spec: v1.ServiceSpec{
  36. Selector: map[string]string{"bar": "baz"},
  37. ClusterIP: "5.6.7.8",
  38. Ports: []v1.ServicePort{
  39. {Name: "u-d-p", Port: 8081, Protocol: "UDP"},
  40. {Name: "t-c-p", Port: 8081, Protocol: "TCP"},
  41. },
  42. },
  43. },
  44. {
  45. ObjectMeta: metav1.ObjectMeta{Name: "q-u-u-x"},
  46. Spec: v1.ServiceSpec{
  47. Selector: map[string]string{"bar": "baz"},
  48. ClusterIP: "9.8.7.6",
  49. Ports: []v1.ServicePort{
  50. {Port: 8082, Protocol: "TCP"},
  51. {Name: "8083", Port: 8083, Protocol: "TCP"},
  52. },
  53. },
  54. },
  55. {
  56. ObjectMeta: metav1.ObjectMeta{Name: "svrc-clusterip-none"},
  57. Spec: v1.ServiceSpec{
  58. Selector: map[string]string{"bar": "baz"},
  59. ClusterIP: "None",
  60. Ports: []v1.ServicePort{
  61. {Port: 8082, Protocol: "TCP"},
  62. },
  63. },
  64. },
  65. {
  66. ObjectMeta: metav1.ObjectMeta{Name: "svrc-clusterip-empty"},
  67. Spec: v1.ServiceSpec{
  68. Selector: map[string]string{"bar": "baz"},
  69. ClusterIP: "",
  70. Ports: []v1.ServicePort{
  71. {Port: 8082, Protocol: "TCP"},
  72. },
  73. },
  74. },
  75. {
  76. ObjectMeta: metav1.ObjectMeta{Name: "super-ipv6"},
  77. Spec: v1.ServiceSpec{
  78. Selector: map[string]string{"bar": "baz"},
  79. ClusterIP: "2001:DB8::",
  80. Ports: []v1.ServicePort{
  81. {Name: "u-d-p", Port: 8084, Protocol: "UDP"},
  82. {Name: "t-c-p", Port: 8084, Protocol: "TCP"},
  83. },
  84. },
  85. },
  86. {
  87. ObjectMeta: metav1.ObjectMeta{Name: "sctp-1"},
  88. Spec: v1.ServiceSpec{
  89. Selector: map[string]string{"bar": "sctp-sel"},
  90. ClusterIP: "1.2.3.4",
  91. Ports: []v1.ServicePort{
  92. {Port: 777, Protocol: "SCTP"},
  93. },
  94. },
  95. },
  96. }
  97. vars := envvars.FromServices(sl)
  98. expected := []v1.EnvVar{
  99. {Name: "FOO_BAR_SERVICE_HOST", Value: "1.2.3.4"},
  100. {Name: "FOO_BAR_SERVICE_PORT", Value: "8080"},
  101. {Name: "FOO_BAR_PORT", Value: "tcp://1.2.3.4:8080"},
  102. {Name: "FOO_BAR_PORT_8080_TCP", Value: "tcp://1.2.3.4:8080"},
  103. {Name: "FOO_BAR_PORT_8080_TCP_PROTO", Value: "tcp"},
  104. {Name: "FOO_BAR_PORT_8080_TCP_PORT", Value: "8080"},
  105. {Name: "FOO_BAR_PORT_8080_TCP_ADDR", Value: "1.2.3.4"},
  106. {Name: "ABC_123_SERVICE_HOST", Value: "5.6.7.8"},
  107. {Name: "ABC_123_SERVICE_PORT", Value: "8081"},
  108. {Name: "ABC_123_SERVICE_PORT_U_D_P", Value: "8081"},
  109. {Name: "ABC_123_SERVICE_PORT_T_C_P", Value: "8081"},
  110. {Name: "ABC_123_PORT", Value: "udp://5.6.7.8:8081"},
  111. {Name: "ABC_123_PORT_8081_UDP", Value: "udp://5.6.7.8:8081"},
  112. {Name: "ABC_123_PORT_8081_UDP_PROTO", Value: "udp"},
  113. {Name: "ABC_123_PORT_8081_UDP_PORT", Value: "8081"},
  114. {Name: "ABC_123_PORT_8081_UDP_ADDR", Value: "5.6.7.8"},
  115. {Name: "ABC_123_PORT_8081_TCP", Value: "tcp://5.6.7.8:8081"},
  116. {Name: "ABC_123_PORT_8081_TCP_PROTO", Value: "tcp"},
  117. {Name: "ABC_123_PORT_8081_TCP_PORT", Value: "8081"},
  118. {Name: "ABC_123_PORT_8081_TCP_ADDR", Value: "5.6.7.8"},
  119. {Name: "Q_U_U_X_SERVICE_HOST", Value: "9.8.7.6"},
  120. {Name: "Q_U_U_X_SERVICE_PORT", Value: "8082"},
  121. {Name: "Q_U_U_X_SERVICE_PORT_8083", Value: "8083"},
  122. {Name: "Q_U_U_X_PORT", Value: "tcp://9.8.7.6:8082"},
  123. {Name: "Q_U_U_X_PORT_8082_TCP", Value: "tcp://9.8.7.6:8082"},
  124. {Name: "Q_U_U_X_PORT_8082_TCP_PROTO", Value: "tcp"},
  125. {Name: "Q_U_U_X_PORT_8082_TCP_PORT", Value: "8082"},
  126. {Name: "Q_U_U_X_PORT_8082_TCP_ADDR", Value: "9.8.7.6"},
  127. {Name: "Q_U_U_X_PORT_8083_TCP", Value: "tcp://9.8.7.6:8083"},
  128. {Name: "Q_U_U_X_PORT_8083_TCP_PROTO", Value: "tcp"},
  129. {Name: "Q_U_U_X_PORT_8083_TCP_PORT", Value: "8083"},
  130. {Name: "Q_U_U_X_PORT_8083_TCP_ADDR", Value: "9.8.7.6"},
  131. {Name: "SUPER_IPV6_SERVICE_HOST", Value: "2001:DB8::"},
  132. {Name: "SUPER_IPV6_SERVICE_PORT", Value: "8084"},
  133. {Name: "SUPER_IPV6_SERVICE_PORT_U_D_P", Value: "8084"},
  134. {Name: "SUPER_IPV6_SERVICE_PORT_T_C_P", Value: "8084"},
  135. {Name: "SUPER_IPV6_PORT", Value: "udp://[2001:DB8::]:8084"},
  136. {Name: "SUPER_IPV6_PORT_8084_UDP", Value: "udp://[2001:DB8::]:8084"},
  137. {Name: "SUPER_IPV6_PORT_8084_UDP_PROTO", Value: "udp"},
  138. {Name: "SUPER_IPV6_PORT_8084_UDP_PORT", Value: "8084"},
  139. {Name: "SUPER_IPV6_PORT_8084_UDP_ADDR", Value: "2001:DB8::"},
  140. {Name: "SUPER_IPV6_PORT_8084_TCP", Value: "tcp://[2001:DB8::]:8084"},
  141. {Name: "SUPER_IPV6_PORT_8084_TCP_PROTO", Value: "tcp"},
  142. {Name: "SUPER_IPV6_PORT_8084_TCP_PORT", Value: "8084"},
  143. {Name: "SUPER_IPV6_PORT_8084_TCP_ADDR", Value: "2001:DB8::"},
  144. {Name: "SCTP_1_SERVICE_HOST", Value: "1.2.3.4"},
  145. {Name: "SCTP_1_SERVICE_PORT", Value: "777"},
  146. {Name: "SCTP_1_PORT", Value: "sctp://1.2.3.4:777"},
  147. {Name: "SCTP_1_PORT_777_SCTP", Value: "sctp://1.2.3.4:777"},
  148. {Name: "SCTP_1_PORT_777_SCTP_PROTO", Value: "sctp"},
  149. {Name: "SCTP_1_PORT_777_SCTP_PORT", Value: "777"},
  150. {Name: "SCTP_1_PORT_777_SCTP_ADDR", Value: "1.2.3.4"},
  151. }
  152. if len(vars) != len(expected) {
  153. t.Errorf("Expected %d env vars, got: %+v", len(expected), vars)
  154. return
  155. }
  156. for i := range expected {
  157. if !reflect.DeepEqual(vars[i], expected[i]) {
  158. t.Errorf("expected %#v, got %#v", vars[i], expected[i])
  159. }
  160. }
  161. }