@@ -1989,3 +1989,121 @@ func TestGetInfoFromURI(t *testing.T) {
19891989 }
19901990 }
19911991}
1992+
1993+ func TestParseDiskParameters_DiskNameTemplateVariables (t * testing.T ) {
1994+ tests := []struct {
1995+ name string
1996+ diskName string
1997+ tags map [string ]string
1998+ expected string
1999+ description string
2000+ }{
2001+ {
2002+ name : "all variables replaced" ,
2003+ diskName : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2004+ tags : map [string ]string {
2005+ consts .PvcNameTag : "mypvc" ,
2006+ consts .PvcNamespaceTag : "myns" ,
2007+ consts .PvNameTag : "mypv" ,
2008+ },
2009+ expected : "disk-mypvc-myns-mypv" ,
2010+ description : "All template variables are replaced" ,
2011+ },
2012+ {
2013+ name : "missing pvc name" ,
2014+ diskName : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2015+ tags : map [string ]string {
2016+ consts .PvcNamespaceTag : "myns" ,
2017+ consts .PvNameTag : "mypv" ,
2018+ },
2019+ expected : "disk-${pvc.metadata.name}-myns-mypv" ,
2020+ description : "pvc name missing, only others replaced" ,
2021+ },
2022+ {
2023+ name : "missing pvc namespace" ,
2024+ diskName : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2025+ tags : map [string ]string {
2026+ consts .PvcNameTag : "mypvc" ,
2027+ consts .PvNameTag : "mypv" ,
2028+ },
2029+ expected : "disk-mypvc-${pvc.metadata.namespace}-mypv" ,
2030+ description : "pvc namespace missing, only others replaced" ,
2031+ },
2032+ {
2033+ name : "missing pv name" ,
2034+ diskName : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2035+ tags : map [string ]string {
2036+ consts .PvcNameTag : "mypvc" ,
2037+ consts .PvcNamespaceTag : "myns" ,
2038+ },
2039+ expected : "disk-mypvc-myns-${pv.metadata.name}" ,
2040+ description : "pv name missing, only others replaced" ,
2041+ },
2042+ {
2043+ name : "no variables present" ,
2044+ diskName : "disk-plain" ,
2045+ tags : map [string ]string {
2046+ consts .PvcNameTag : "mypvc" ,
2047+ consts .PvcNamespaceTag : "myns" ,
2048+ consts .PvNameTag : "mypv" ,
2049+ },
2050+ expected : "disk-plain" ,
2051+ description : "No template variables, disk name unchanged" ,
2052+ },
2053+ {
2054+ name : "empty tags" ,
2055+ diskName : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2056+ tags : map [string ]string {},
2057+ expected : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2058+ description : "No tags, disk name unchanged" ,
2059+ },
2060+ {
2061+ name : "empty disk name" ,
2062+ diskName : "" ,
2063+ tags : map [string ]string {
2064+ consts .PvcNameTag : "mypvc" ,
2065+ consts .PvcNamespaceTag : "myns" ,
2066+ consts .PvNameTag : "mypv" ,
2067+ },
2068+ expected : "" ,
2069+ description : "Empty disk name, nothing to replace" ,
2070+ },
2071+ {
2072+ name : "variables with empty tag values" ,
2073+ diskName : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2074+ tags : map [string ]string {
2075+ consts .PvcNameTag : "" ,
2076+ consts .PvcNamespaceTag : "" ,
2077+ consts .PvNameTag : "" ,
2078+ },
2079+ expected : "disk-${pvc.metadata.name}-${pvc.metadata.namespace}-${pv.metadata.name}" ,
2080+ description : "Tags present but empty, disk name unchanged" ,
2081+ },
2082+ }
2083+
2084+ for _ , tt := range tests {
2085+ t .Run (tt .name , func (t * testing.T ) {
2086+ params := ManagedDiskParameters {
2087+ DiskName : tt .diskName ,
2088+ Tags : make (map [string ]string ),
2089+ }
2090+ // Copy tags to params.Tags
2091+ for k , v := range tt .tags {
2092+ params .Tags [k ] = v
2093+ }
2094+ // Simulate the template replacement logic
2095+ if strings .Contains (params .DiskName , "$" ) {
2096+ if pvcName , ok := params .Tags [consts .PvcNameTag ]; ok && pvcName != "" {
2097+ params .DiskName = strings .ReplaceAll (params .DiskName , "${pvc.metadata.name}" , pvcName )
2098+ }
2099+ if pvcNamespace , ok := params .Tags [consts .PvcNamespaceTag ]; ok && pvcNamespace != "" {
2100+ params .DiskName = strings .ReplaceAll (params .DiskName , "${pvc.metadata.namespace}" , pvcNamespace )
2101+ }
2102+ if pvName , ok := params .Tags [consts .PvNameTag ]; ok && pvName != "" {
2103+ params .DiskName = strings .ReplaceAll (params .DiskName , "${pv.metadata.name}" , pvName )
2104+ }
2105+ }
2106+ assert .Equal (t , tt .expected , params .DiskName , tt .description )
2107+ })
2108+ }
2109+ }
0 commit comments