2022-01-12 08:57:03 +00:00
/ *
Copyright the Velero contributors .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package privilegesmgmt
import (
"context"
"flag"
"fmt"
"time"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
apierrors "k8s.io/apimachinery/pkg/api/errors"
waitutil "k8s.io/apimachinery/pkg/util/wait"
kbclient "sigs.k8s.io/controller-runtime/pkg/client"
v1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
. "github.com/vmware-tanzu/velero/test/e2e"
. "github.com/vmware-tanzu/velero/test/e2e/util/k8s"
. "github.com/vmware-tanzu/velero/test/e2e/util/velero"
)
func SSRTest ( ) {
testNS := "ssr-test"
2022-04-10 10:20:16 +00:00
var (
2022-07-05 12:37:14 +00:00
err error
2022-04-10 10:20:16 +00:00
)
2023-01-30 03:58:41 +00:00
veleroCfg := VeleroCfg
2022-01-12 08:57:03 +00:00
BeforeEach ( func ( ) {
flag . Parse ( )
2023-01-30 03:58:41 +00:00
veleroCfg . UseVolumeSnapshots = false
if veleroCfg . InstallVelero {
Expect ( VeleroInstall ( context . Background ( ) , & veleroCfg ) ) . To ( Succeed ( ) )
2022-01-12 08:57:03 +00:00
}
} )
AfterEach ( func ( ) {
2023-01-30 03:58:41 +00:00
if veleroCfg . InstallVelero {
if ! veleroCfg . Debug {
Expect ( VeleroUninstall ( context . Background ( ) , veleroCfg . VeleroCLI , veleroCfg . VeleroNamespace ) ) . To ( Succeed ( ) )
2022-04-06 03:53:20 +00:00
}
2022-01-12 08:57:03 +00:00
}
} )
2023-01-30 03:58:41 +00:00
It ( fmt . Sprintf ( "Should create an ssr object in the %s namespace and later removed by controller" , veleroCfg . VeleroNamespace ) , func ( ) {
2023-04-16 17:59:21 +00:00
ctx , ctxCancel := context . WithTimeout ( context . Background ( ) , time . Duration ( time . Minute * 10 ) )
defer ctxCancel ( )
2023-01-30 03:58:41 +00:00
defer DeleteNamespace ( context . TODO ( ) , * veleroCfg . ClientToInstallVelero , testNS , false )
2022-01-12 08:57:03 +00:00
By ( fmt . Sprintf ( "Create %s namespace" , testNS ) )
2023-01-30 03:58:41 +00:00
Expect ( CreateNamespace ( ctx , * veleroCfg . ClientToInstallVelero , testNS ) ) . To ( Succeed ( ) ,
2022-01-12 08:57:03 +00:00
fmt . Sprintf ( "Failed to create %s namespace" , testNS ) )
2022-10-01 02:28:59 +00:00
By ( fmt . Sprintf ( "Get version in %s namespace" , testNS ) , func ( ) {
2023-01-30 03:58:41 +00:00
Expect ( VeleroVersion ( context . Background ( ) , veleroCfg . VeleroCLI , testNS ) ) . To ( Succeed ( ) ,
2022-10-01 02:28:59 +00:00
fmt . Sprintf ( "Failed to create an ssr object in the %s namespace" , testNS ) )
} )
2023-01-30 03:58:41 +00:00
By ( fmt . Sprintf ( "Get version in %s namespace" , veleroCfg . VeleroNamespace ) , func ( ) {
Expect ( VeleroVersion ( context . Background ( ) , veleroCfg . VeleroCLI , veleroCfg . VeleroNamespace ) ) . To ( Succeed ( ) ,
fmt . Sprintf ( "Failed to create an ssr object in %s namespace" , veleroCfg . VeleroNamespace ) )
2022-10-01 02:28:59 +00:00
} )
2022-01-12 08:57:03 +00:00
ssrListResp := new ( v1 . ServerStatusRequestList )
2023-01-30 03:58:41 +00:00
By ( fmt . Sprintf ( "Check ssr object in %s namespace" , veleroCfg . VeleroNamespace ) )
2022-01-28 06:13:10 +00:00
err = waitutil . PollImmediate ( 5 * time . Second , time . Minute ,
func ( ) ( bool , error ) {
2023-01-30 03:58:41 +00:00
if err = veleroCfg . ClientToInstallVelero . Kubebuilder . List ( ctx , ssrListResp , & kbclient . ListOptions { Namespace : veleroCfg . VeleroNamespace } ) ; err != nil {
return false , fmt . Errorf ( "failed to list ssr object in %s namespace with err %v" , veleroCfg . VeleroNamespace , err )
2022-01-28 06:13:10 +00:00
}
if len ( ssrListResp . Items ) != 1 {
2023-01-30 03:58:41 +00:00
return false , fmt . Errorf ( "count of ssr object in %s namespace is not 1" , veleroCfg . VeleroNamespace )
2022-01-28 06:13:10 +00:00
}
if ssrListResp . Items [ 0 ] . Status . ServerVersion == "" {
2023-01-30 03:58:41 +00:00
fmt . Printf ( "ServerVersion of ssr object in %s namespace should not empty, current response result %v\n" , veleroCfg . VeleroNamespace , ssrListResp )
2022-01-28 06:13:10 +00:00
return false , nil
}
if ssrListResp . Items [ 0 ] . Status . Phase != "Processed" {
2023-01-30 03:58:41 +00:00
return false , fmt . Errorf ( "phase of ssr object in %s namespace should be Processed but got phase %s" , veleroCfg . VeleroNamespace , ssrListResp . Items [ 0 ] . Status . Phase )
2022-01-28 06:13:10 +00:00
}
return true , nil
} )
if err == waitutil . ErrWaitTimeout {
2023-01-30 03:58:41 +00:00
fmt . Printf ( "exceed test case deadline and failed to check ssr object in %s namespace" , veleroCfg . VeleroNamespace )
2022-01-28 06:13:10 +00:00
}
2023-01-30 03:58:41 +00:00
Expect ( err ) . To ( Succeed ( ) , fmt . Sprintf ( "Failed to check ssr object in %s namespace" , veleroCfg . VeleroNamespace ) )
2022-01-12 08:57:03 +00:00
By ( fmt . Sprintf ( "Check ssr object in %s namespace" , testNS ) )
2023-01-30 03:58:41 +00:00
Expect ( veleroCfg . ClientToInstallVelero . Kubebuilder . List ( ctx , ssrListResp , & kbclient . ListOptions { Namespace : testNS } ) ) . To ( Succeed ( ) ,
2022-01-12 08:57:03 +00:00
fmt . Sprintf ( "Failed to list ssr object in %s namespace" , testNS ) )
Expect ( len ( ssrListResp . Items ) ) . To ( BeNumerically ( "==" , 1 ) ,
fmt . Sprintf ( "Count of ssr object in %s namespace is not 1" , testNS ) )
Expect ( ssrListResp . Items [ 0 ] . Status . Phase ) . To ( BeEmpty ( ) ,
fmt . Sprintf ( "Status of ssr object in %s namespace should be empty" , testNS ) )
Expect ( ssrListResp . Items [ 0 ] . Status . ServerVersion ) . To ( BeEmpty ( ) ,
fmt . Sprintf ( "ServerVersion of ssr object in %s namespace should be empty" , testNS ) )
2023-01-30 03:58:41 +00:00
By ( fmt . Sprintf ( "Waiting ssr object in %s namespace deleted" , veleroCfg . VeleroNamespace ) )
2022-01-12 08:57:03 +00:00
err = waitutil . PollImmediateInfinite ( 5 * time . Second ,
func ( ) ( bool , error ) {
2023-01-30 03:58:41 +00:00
if err = veleroCfg . ClientToInstallVelero . Kubebuilder . List ( ctx , ssrListResp , & kbclient . ListOptions { Namespace : veleroCfg . VeleroNamespace } ) ; err != nil {
2022-01-12 08:57:03 +00:00
if apierrors . IsNotFound ( err ) {
return true , nil
}
return false , err
}
if len ( ssrListResp . Items ) != 0 {
return false , nil
}
return true , nil
} )
2023-01-30 03:58:41 +00:00
Expect ( err ) . To ( Succeed ( ) , fmt . Sprintf ( "ssr object in %s namespace is not been deleted by controller" , veleroCfg . VeleroNamespace ) )
2022-01-12 08:57:03 +00:00
} )
}