github.com/containers/podman/v4@v4.9.4/pkg/specgen/generate/kube/kube_test.go (about)

     1  //go:build !remote
     2  // +build !remote
     3  
     4  package kube
     5  
     6  import (
     7  	"testing"
     8  
     9  	v1 "github.com/containers/podman/v4/pkg/k8s.io/api/core/v1"
    10  	"github.com/containers/podman/v4/pkg/k8s.io/apimachinery/pkg/util/intstr"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func testPropagation(t *testing.T, propagation v1.MountPropagationMode, expected string) {
    15  	dest, options, err := parseMountPath("/to", false, &propagation)
    16  	assert.NoError(t, err)
    17  	assert.Equal(t, dest, "/to")
    18  	assert.Contains(t, options, expected)
    19  }
    20  
    21  func TestParseMountPathPropagation(t *testing.T) {
    22  	testPropagation(t, v1.MountPropagationNone, "private")
    23  	testPropagation(t, v1.MountPropagationHostToContainer, "rslave")
    24  	testPropagation(t, v1.MountPropagationBidirectional, "rshared")
    25  
    26  	prop := v1.MountPropagationMode("SpaceWave")
    27  	_, _, err := parseMountPath("/to", false, &prop)
    28  	assert.Error(t, err)
    29  
    30  	_, options, err := parseMountPath("/to", false, nil)
    31  	assert.NoError(t, err)
    32  	assert.NotContains(t, options, "private")
    33  	assert.NotContains(t, options, "rslave")
    34  	assert.NotContains(t, options, "rshared")
    35  }
    36  
    37  func TestParseMountPathRO(t *testing.T) {
    38  	_, options, err := parseMountPath("/to", true, nil)
    39  	assert.NoError(t, err)
    40  	assert.Contains(t, options, "ro")
    41  
    42  	_, options, err = parseMountPath("/to", false, nil)
    43  	assert.NoError(t, err)
    44  	assert.NotContains(t, options, "ro")
    45  }
    46  
    47  func TestGetPodPorts(t *testing.T) {
    48  	c1 := v1.Container{
    49  		Name: "container1",
    50  		Ports: []v1.ContainerPort{{
    51  			ContainerPort: 5000,
    52  		}, {
    53  			ContainerPort: 5001,
    54  			HostPort:      5002,
    55  		}},
    56  	}
    57  	c2 := v1.Container{
    58  		Name: "container2",
    59  		Ports: []v1.ContainerPort{{
    60  			HostPort: 5004,
    61  		}},
    62  	}
    63  	r := getPodPorts([]v1.Container{c1, c2}, false)
    64  	assert.Equal(t, 2, len(r))
    65  	assert.Equal(t, uint16(5001), r[0].ContainerPort)
    66  	assert.Equal(t, uint16(5002), r[0].HostPort)
    67  	assert.Equal(t, uint16(5004), r[1].ContainerPort)
    68  	assert.Equal(t, uint16(5004), r[1].HostPort)
    69  
    70  	r = getPodPorts([]v1.Container{c1, c2}, true)
    71  	assert.Equal(t, 3, len(r))
    72  	assert.Equal(t, uint16(5000), r[0].ContainerPort)
    73  	assert.Equal(t, uint16(5000), r[0].HostPort)
    74  	assert.Equal(t, uint16(5001), r[1].ContainerPort)
    75  	assert.Equal(t, uint16(5002), r[1].HostPort)
    76  	assert.Equal(t, uint16(5004), r[2].ContainerPort)
    77  	assert.Equal(t, uint16(5004), r[2].HostPort)
    78  }
    79  
    80  func TestGetPortNumber(t *testing.T) {
    81  	portSpec := intstr.IntOrString{Type: intstr.Int, IntVal: 3000, StrVal: "myport"}
    82  	cp1 := v1.ContainerPort{Name: "myport", ContainerPort: 4000}
    83  	cp2 := v1.ContainerPort{Name: "myport2", ContainerPort: 5000}
    84  	i, e := getPortNumber(portSpec, []v1.ContainerPort{cp1, cp2})
    85  	assert.NoError(t, e)
    86  	assert.Equal(t, i, int(portSpec.IntVal))
    87  
    88  	portSpec.Type = intstr.String
    89  	i, e = getPortNumber(portSpec, []v1.ContainerPort{cp1, cp2})
    90  	assert.NoError(t, e)
    91  	assert.Equal(t, i, 4000)
    92  
    93  	portSpec.StrVal = "not_valid"
    94  	_, e = getPortNumber(portSpec, []v1.ContainerPort{cp1, cp2})
    95  	assert.Error(t, e)
    96  
    97  	portSpec.StrVal = "6000"
    98  	i, e = getPortNumber(portSpec, []v1.ContainerPort{cp1, cp2})
    99  	assert.NoError(t, e)
   100  	assert.Equal(t, i, 6000)
   101  }