|
| 1 | +using System; |
| 2 | +using k8s.Models; |
| 3 | +using Xunit; |
| 4 | + |
| 5 | +namespace k8s.Tests |
| 6 | +{ |
| 7 | + public class ModelExtensionTests |
| 8 | + { |
| 9 | + [Fact] |
| 10 | + public void TestMetadata() |
| 11 | + { |
| 12 | + // test getters on null metadata |
| 13 | + var pod = new V1Pod(); |
| 14 | + Assert.Null(pod.Annotations()); |
| 15 | + Assert.Null(pod.ApiGroup()); |
| 16 | + var (g, v) = pod.ApiGroupAndVersion(); |
| 17 | + Assert.Null(g); |
| 18 | + Assert.Null(v); |
| 19 | + Assert.Null(pod.ApiGroupVersion()); |
| 20 | + Assert.Null(pod.CreationTimestamp()); |
| 21 | + Assert.Null(pod.DeletionTimestamp()); |
| 22 | + Assert.Null(pod.Finalizers()); |
| 23 | + Assert.Null(pod.Generation()); |
| 24 | + Assert.Null(pod.GetAnnotation("x")); |
| 25 | + Assert.Null(pod.GetController()); |
| 26 | + Assert.Null(pod.GetLabel("x")); |
| 27 | + Assert.False(pod.HasFinalizer("x")); |
| 28 | + Assert.Null(pod.Labels()); |
| 29 | + Assert.Null(pod.Name()); |
| 30 | + Assert.Null(pod.Namespace()); |
| 31 | + Assert.Null(pod.OwnerReferences()); |
| 32 | + Assert.Null(pod.ResourceVersion()); |
| 33 | + Assert.Null(pod.Uid()); |
| 34 | + Assert.Null(pod.Metadata); |
| 35 | + |
| 36 | + // test API version stuff |
| 37 | + pod = new V1Pod() { ApiVersion = "v1" }; |
| 38 | + Assert.Equal("", pod.ApiGroup()); |
| 39 | + (g, v) = pod.ApiGroupAndVersion(); |
| 40 | + Assert.Equal("", g); |
| 41 | + Assert.Equal("v1", v); |
| 42 | + Assert.Equal("v1", pod.ApiGroupVersion()); |
| 43 | + pod.ApiVersion = "abc/v2"; |
| 44 | + Assert.Equal("abc", pod.ApiGroup()); |
| 45 | + (g, v) = pod.ApiGroupAndVersion(); |
| 46 | + Assert.Equal("abc", g); |
| 47 | + Assert.Equal("v2", v); |
| 48 | + Assert.Equal("v2", pod.ApiGroupVersion()); |
| 49 | + |
| 50 | + // test the Ensure*() functions |
| 51 | + Assert.NotNull(pod.EnsureMetadata()); |
| 52 | + Assert.NotNull(pod.Metadata); |
| 53 | + Assert.NotNull(pod.Metadata.EnsureAnnotations()); |
| 54 | + Assert.NotNull(pod.Metadata.Annotations); |
| 55 | + Assert.NotNull(pod.Metadata.EnsureFinalizers()); |
| 56 | + Assert.NotNull(pod.Metadata.Finalizers); |
| 57 | + Assert.NotNull(pod.Metadata.EnsureLabels()); |
| 58 | + Assert.NotNull(pod.Metadata.Labels); |
| 59 | + |
| 60 | + // test getters with non-null values |
| 61 | + DateTime ts = DateTime.UtcNow, ts2 = DateTime.Now; |
| 62 | + pod.Metadata = new V1ObjectMeta() |
| 63 | + { |
| 64 | + CreationTimestamp = ts, DeletionTimestamp = ts2, Generation = 1, Name = "name", NamespaceProperty = "ns", ResourceVersion = "42", Uid = "id" |
| 65 | + }; |
| 66 | + Assert.Equal(ts, pod.CreationTimestamp().Value); |
| 67 | + Assert.Equal(ts2, pod.DeletionTimestamp().Value); |
| 68 | + Assert.Equal(1, pod.Generation().Value); |
| 69 | + Assert.Equal("name", pod.Name()); |
| 70 | + Assert.Equal("ns", pod.Namespace()); |
| 71 | + Assert.Equal("42", pod.ResourceVersion()); |
| 72 | + Assert.Equal("id", pod.Uid()); |
| 73 | + |
| 74 | + // test annotations and labels |
| 75 | + pod.SetAnnotation("x", "y"); |
| 76 | + pod.SetLabel("a", "b"); |
| 77 | + Assert.Equal(1, pod.Annotations().Count); |
| 78 | + Assert.Equal(1, pod.Labels().Count); |
| 79 | + Assert.Equal("y", pod.GetAnnotation("x")); |
| 80 | + Assert.Equal("y", pod.Metadata.Annotations["x"]); |
| 81 | + Assert.Null(pod.GetAnnotation("a")); |
| 82 | + Assert.Equal("b", pod.GetLabel("a")); |
| 83 | + Assert.Equal("b", pod.Metadata.Labels["a"]); |
| 84 | + Assert.Null(pod.GetLabel("x")); |
| 85 | + pod.SetAnnotation("x", null); |
| 86 | + Assert.Equal(0, pod.Annotations().Count); |
| 87 | + pod.SetLabel("a", null); |
| 88 | + Assert.Equal(0, pod.Labels().Count); |
| 89 | + |
| 90 | + // test finalizers |
| 91 | + Assert.False(pod.HasFinalizer("abc")); |
| 92 | + Assert.True(pod.AddFinalizer("abc")); |
| 93 | + Assert.True(pod.HasFinalizer("abc")); |
| 94 | + Assert.False(pod.AddFinalizer("abc")); |
| 95 | + Assert.False(pod.HasFinalizer("xyz")); |
| 96 | + Assert.False(pod.RemoveFinalizer("xyz")); |
| 97 | + Assert.True(pod.RemoveFinalizer("abc")); |
| 98 | + Assert.False(pod.HasFinalizer("abc")); |
| 99 | + Assert.False(pod.RemoveFinalizer("abc")); |
| 100 | + } |
| 101 | + |
| 102 | + [Fact] |
| 103 | + public void TestReferences() |
| 104 | + { |
| 105 | + // test object references |
| 106 | + var pod = new V1Pod() { ApiVersion = "abc/xyz", Kind = "sometimes" }; |
| 107 | + pod.Metadata = new V1ObjectMeta() { Name = "name", NamespaceProperty = "ns", ResourceVersion = "ver", Uid = "id" }; |
| 108 | + var objr = pod.GetObjectReference(); |
| 109 | + Assert.Equal(pod.ApiVersion, objr.ApiVersion); |
| 110 | + Assert.Equal(pod.Kind, objr.Kind); |
| 111 | + Assert.Equal(pod.Name(), objr.Name); |
| 112 | + Assert.Equal(pod.Namespace(), objr.NamespaceProperty); |
| 113 | + Assert.Equal(pod.ResourceVersion(), objr.ResourceVersion); |
| 114 | + Assert.Equal(pod.Uid(), objr.Uid); |
| 115 | + Assert.True(objr.Matches(pod)); |
| 116 | + |
| 117 | + (pod.ApiVersion, pod.Kind) = (null, null); |
| 118 | + objr = pod.GetObjectReference(); |
| 119 | + Assert.Equal("v1", objr.ApiVersion); |
| 120 | + Assert.Equal("Pod", objr.Kind); |
| 121 | + Assert.False(objr.Matches(pod)); |
| 122 | + (pod.ApiVersion, pod.Kind) = (objr.ApiVersion, objr.Kind); |
| 123 | + Assert.True(objr.Matches(pod)); |
| 124 | + pod.Metadata.Name = "nome"; |
| 125 | + Assert.False(objr.Matches(pod)); |
| 126 | + |
| 127 | + // test owner references |
| 128 | + (pod.ApiVersion, pod.Kind) = ("abc/xyz", "sometimes"); |
| 129 | + var ownr = pod.CreateOwnerReference(true, false); |
| 130 | + Assert.Equal(pod.ApiVersion, ownr.ApiVersion); |
| 131 | + Assert.Equal(pod.Kind, ownr.Kind); |
| 132 | + Assert.Equal(pod.Name(), ownr.Name); |
| 133 | + Assert.Equal(pod.Uid(), ownr.Uid); |
| 134 | + Assert.True(ownr.Controller.Value); |
| 135 | + Assert.False(ownr.BlockOwnerDeletion.Value); |
| 136 | + Assert.True(ownr.Matches(pod)); |
| 137 | + |
| 138 | + (pod.ApiVersion, pod.Kind) = (null, null); |
| 139 | + Assert.False(ownr.Matches(pod)); |
| 140 | + ownr = pod.CreateOwnerReference(); |
| 141 | + Assert.Equal("v1", ownr.ApiVersion); |
| 142 | + Assert.Equal("Pod", ownr.Kind); |
| 143 | + Assert.Null(ownr.Controller); |
| 144 | + Assert.Null(ownr.BlockOwnerDeletion); |
| 145 | + Assert.False(ownr.Matches(pod)); |
| 146 | + (pod.ApiVersion, pod.Kind) = (ownr.ApiVersion, ownr.Kind); |
| 147 | + Assert.True(ownr.Matches(pod)); |
| 148 | + ownr.Name = "nim"; |
| 149 | + Assert.False(ownr.Matches(pod)); |
| 150 | + ownr.Name = pod.Name(); |
| 151 | + |
| 152 | + var svc = new V1Service(); |
| 153 | + svc.AddOwnerReference(ownr); |
| 154 | + Assert.Equal(0, svc.FindOwnerReference(pod)); |
| 155 | + Assert.Equal(-1, svc.FindOwnerReference(svc)); |
| 156 | + Assert.Null(svc.GetController()); |
| 157 | + svc.OwnerReferences()[0].Controller = true; |
| 158 | + Assert.Same(ownr, svc.GetController()); |
| 159 | + Assert.Same(ownr, svc.RemoveOwnerReference(pod)); |
| 160 | + Assert.Equal(0, svc.OwnerReferences().Count); |
| 161 | + svc.AddOwnerReference(pod.CreateOwnerReference(true)); |
| 162 | + svc.AddOwnerReference(pod.CreateOwnerReference(false)); |
| 163 | + svc.AddOwnerReference(pod.CreateOwnerReference()); |
| 164 | + Assert.Equal(3, svc.OwnerReferences().Count); |
| 165 | + Assert.NotNull(svc.RemoveOwnerReference(pod)); |
| 166 | + Assert.Equal(2, svc.OwnerReferences().Count); |
| 167 | + Assert.True(svc.RemoveOwnerReferences(pod)); |
| 168 | + Assert.Equal(0, svc.OwnerReferences().Count); |
| 169 | + } |
| 170 | + } |
| 171 | +} |
0 commit comments