func TestLabels(t *testing.T) { var ( testPodUID = types.UID("test_pod_uid") testVolumeName = "test_labels" testNamespace = "test_metadata_namespace" testName = "test_metadata_name" ) labels := map[string]string{ "key1": "value1", "key2": "value2"} clientset := fake.NewSimpleClientset(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: testName, Namespace: testNamespace, Labels: labels, }, }) pluginMgr := volume.VolumePluginMgr{} rootDir, host := newTestHost(t, clientset) defer os.RemoveAll(rootDir) pluginMgr.InitPlugins(ProbeVolumePlugins(), host) plugin, err := pluginMgr.FindPluginByName(downwardAPIPluginName) defaultMode := int32(0644) volumeSpec := &api.Volume{ Name: testVolumeName, VolumeSource: api.VolumeSource{ DownwardAPI: &api.DownwardAPIVolumeSource{ DefaultMode: &defaultMode, Items: []api.DownwardAPIVolumeFile{ {Path: "labels", FieldRef: &api.ObjectFieldSelector{ FieldPath: "metadata.labels"}}}}, }, } if err != nil { t.Errorf("Can't find the plugin by name") } pod := &api.Pod{ObjectMeta: api.ObjectMeta{UID: testPodUID, Labels: labels}} mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) if err != nil { t.Errorf("Failed to make a new Mounter: %v", err) } if mounter == nil { t.Errorf("Got a nil Mounter") } volumePath := mounter.GetPath() err = mounter.SetUp(nil) if err != nil { t.Errorf("Failed to setup volume: %v", err) } // downwardAPI volume should create its own empty wrapper path podWrapperMetadataDir := fmt.Sprintf("%v/pods/%v/plugins/kubernetes.io~empty-dir/wrapped_%v", rootDir, testPodUID, testVolumeName) if _, err := os.Stat(podWrapperMetadataDir); err != nil { if os.IsNotExist(err) { t.Errorf("SetUp() failed, empty-dir wrapper path was not created: %s", podWrapperMetadataDir) } else { t.Errorf("SetUp() failed: %v", err) } } var data []byte data, err = ioutil.ReadFile(path.Join(volumePath, "labels")) if err != nil { t.Errorf(err.Error()) } if sortLines(string(data)) != sortLines(fieldpath.FormatMap(labels)) { t.Errorf("Found `%s` expected %s", data, fieldpath.FormatMap(labels)) } CleanEverything(plugin, testVolumeName, volumePath, testPodUID, t) }
func TestWriteTwiceWithUpdate(t *testing.T) { var ( testPodUID = types.UID("test_pod_uid") testVolumeName = "test_write_twice_with_update" testNamespace = "test_metadata_namespace" testName = "test_metadata_name" ) labels := map[string]string{ "key1": "value1", "key2": "value2"} clientset := fake.NewSimpleClientset(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: testName, Namespace: testNamespace, Labels: labels, }, }) pluginMgr := volume.VolumePluginMgr{} tmpDir, host := newTestHost(t, clientset) defer os.RemoveAll(tmpDir) pluginMgr.InitPlugins(ProbeVolumePlugins(), host) plugin, err := pluginMgr.FindPluginByName(downwardAPIPluginName) defaultMode := int32(0644) volumeSpec := &api.Volume{ Name: testVolumeName, VolumeSource: api.VolumeSource{ DownwardAPI: &api.DownwardAPIVolumeSource{ DefaultMode: &defaultMode, Items: []api.DownwardAPIVolumeFile{ {Path: "labels", FieldRef: &api.ObjectFieldSelector{ FieldPath: "metadata.labels"}}}}, }, } if err != nil { t.Errorf("Can't find the plugin by name") } pod := &api.Pod{ObjectMeta: api.ObjectMeta{UID: testPodUID, Labels: labels}} mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) if err != nil { t.Errorf("Failed to make a new Mounter: %v", err) } if mounter == nil { t.Errorf("Got a nil Mounter") } volumePath := mounter.GetPath() err = mounter.SetUp(nil) if err != nil { t.Errorf("Failed to setup volume: %v", err) } var currentTarget string if currentTarget, err = os.Readlink(path.Join(volumePath, downwardAPIDir)); err != nil { t.Errorf("labels file should be a link... %s\n", err.Error()) } var data []byte data, err = ioutil.ReadFile(path.Join(volumePath, "labels")) if err != nil { t.Errorf(err.Error()) } if sortLines(string(data)) != sortLines(fieldpath.FormatMap(labels)) { t.Errorf("Found `%s` expected %s", data, fieldpath.FormatMap(labels)) } newLabels := map[string]string{ "key1": "value1", "key2": "value2", "key3": "value3"} // Now update the labels pod.ObjectMeta.Labels = newLabels err = mounter.SetUp(nil) // now re-run Setup if err != nil { t.Errorf("Failed to re-setup volume: %v", err) } // get the link of the link var currentTarget2 string if currentTarget2, err = os.Readlink(path.Join(volumePath, downwardAPIDir)); err != nil { t.Errorf(".current should be a link... %s\n", err.Error()) } if currentTarget2 == currentTarget { t.Errorf("Got and update between the two Setup... Target link should NOT be the same\n") } data, err = ioutil.ReadFile(path.Join(volumePath, "labels")) if err != nil { t.Errorf(err.Error()) } if sortLines(string(data)) != sortLines(fieldpath.FormatMap(newLabels)) { t.Errorf("Found `%s` expected %s", data, fieldpath.FormatMap(newLabels)) } CleanEverything(plugin, testVolumeName, volumePath, testPodUID, t) }
func TestWriteWithUnixPathBadPath(t *testing.T) { var ( testPodUID = types.UID("test_pod_uid") testVolumeName = "test_write_with_unix_path" testNamespace = "test_metadata_namespace" testName = "test_metadata_name" ) labels := map[string]string{ "key1": "value1", "key2": "value2", } clientset := fake.NewSimpleClientset(&api.Pod{ ObjectMeta: api.ObjectMeta{ Name: testName, Namespace: testNamespace, Labels: labels, }, }) pluginMgr := volume.VolumePluginMgr{} tmpDir, host := newTestHost(t, clientset) defer os.RemoveAll(tmpDir) pluginMgr.InitPlugins(ProbeVolumePlugins(), host) plugin, err := pluginMgr.FindPluginByName(downwardAPIPluginName) if err != nil { t.Errorf("Can't find the plugin by name") } defaultMode := int32(0644) volumeSpec := &api.Volume{ Name: testVolumeName, VolumeSource: api.VolumeSource{ DownwardAPI: &api.DownwardAPIVolumeSource{ DefaultMode: &defaultMode, Items: []api.DownwardAPIVolumeFile{ { Path: "this//labels", FieldRef: &api.ObjectFieldSelector{ FieldPath: "metadata.labels", }, }, }, }, }, } pod := &api.Pod{ObjectMeta: api.ObjectMeta{UID: testPodUID, Labels: labels}} mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) if err != nil { t.Fatalf("Failed to make a new Mounter: %v", err) } else if mounter == nil { t.Fatalf("Got a nil Mounter") } volumePath := mounter.GetPath() defer CleanEverything(plugin, testVolumeName, volumePath, testPodUID, t) err = mounter.SetUp(nil) if err != nil { t.Fatalf("Failed to setup volume: %v", err) } data, err := ioutil.ReadFile(path.Join(volumePath, "this/labels")) if err != nil { t.Fatalf(err.Error()) } if sortLines(string(data)) != sortLines(fieldpath.FormatMap(labels)) { t.Errorf("Found `%s` expected %s", data, fieldpath.FormatMap(labels)) } }
func TestAnnotations(t *testing.T) { var ( testPodUID = types.UID("test_pod_uid") testVolumeName = "test_annotations" testNamespace = "test_metadata_namespace" testName = "test_metadata_name" ) annotations := map[string]string{ "a1": "value1", "a2": "value2"} defaultMode := int32(0644) volumeSpec := &v1.Volume{ Name: testVolumeName, VolumeSource: v1.VolumeSource{ DownwardAPI: &v1.DownwardAPIVolumeSource{ DefaultMode: &defaultMode, Items: []v1.DownwardAPIVolumeFile{ {Path: "annotations", FieldRef: &v1.ObjectFieldSelector{ FieldPath: "metadata.annotations"}}}}, }, } clientset := fake.NewSimpleClientset(&v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: testName, Namespace: testNamespace, Annotations: annotations, }, }) pluginMgr := volume.VolumePluginMgr{} tmpDir, host := newTestHost(t, clientset) defer os.RemoveAll(tmpDir) pluginMgr.InitPlugins(ProbeVolumePlugins(), host) plugin, err := pluginMgr.FindPluginByName(downwardAPIPluginName) if err != nil { t.Errorf("Can't find the plugin by name") } pod := &v1.Pod{ObjectMeta: metav1.ObjectMeta{UID: testPodUID, Annotations: annotations}} mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) if err != nil { t.Errorf("Failed to make a new Mounter: %v", err) } if mounter == nil { t.Errorf("Got a nil Mounter") } volumePath := mounter.GetPath() err = mounter.SetUp(nil) if err != nil { t.Errorf("Failed to setup volume: %v", err) } var data []byte data, err = ioutil.ReadFile(path.Join(volumePath, "annotations")) if err != nil { t.Errorf(err.Error()) } if sortLines(string(data)) != sortLines(fieldpath.FormatMap(annotations)) { t.Errorf("Found `%s` expected %s", data, fieldpath.FormatMap(annotations)) } CleanEverything(plugin, testVolumeName, volumePath, testPodUID, t) }