package prune
import (
"reflect"
"testing"
"time"
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/util/sets"
deployapi "github.com/openshift/origin/pkg/deploy/api"
)
func mockDeploymentConfig(namespace, name string) *deployapi.DeploymentConfig {
return &deployapi.DeploymentConfig{ObjectMeta: kapi.ObjectMeta{Namespace: namespace, Name: name}}
}
func withSize(item *kapi.ReplicationController, replicas int) *kapi.ReplicationController {
item.Spec.Replicas = int32(replicas)
item.Status.Replicas = int32(replicas)
return item
}
func withCreated(item *kapi.ReplicationController, creationTimestamp unversioned.Time) *kapi.ReplicationController {
item.CreationTimestamp = creationTimestamp
return item
}
func withStatus(item *kapi.ReplicationController, status deployapi.DeploymentStatus) *kapi.ReplicationController {
item.Annotations[deployapi.DeploymentStatusAnnotation] = string(status)
return item
}
func mockDeployment(namespace, name string, deploymentConfig *deployapi.DeploymentConfig) *kapi.ReplicationController {
item := &kapi.ReplicationController{ObjectMeta: kapi.ObjectMeta{Namespace: namespace, Name: name, Annotations: map[string]string{}}}
if deploymentConfig != nil {
item.Annotations[deployapi.DeploymentConfigAnnotation] = deploymentConfig.Name
}
item.Annotations[deployapi.DeploymentStatusAnnotation] = string(deployapi.DeploymentStatusNew)
return item
}
func TestDeploymentByDeploymentConfigIndexFunc(t *testing.T) {
config := mockDeploymentConfig("a", "b")
deployment := mockDeployment("a", "c", config)
actualKey, err := DeploymentByDeploymentConfigIndexFunc(deployment)
if err != nil {
t.Errorf("Unexpected error %v", err)
}
expectedKey := []string{"a/b"}
if !reflect.DeepEqual(actualKey, expectedKey) {
t.Errorf("expected %v, actual %v", expectedKey, actualKey)
}
deploymentWithNoConfig := &kapi.ReplicationController{}
actualKey, err = DeploymentByDeploymentConfigIndexFunc(deploymentWithNoConfig)
if err != nil {
t.Errorf("Unexpected error %v", err)
}
expectedKey = []string{"orphan"}
if !reflect.DeepEqual(actualKey, expectedKey) {
t.Errorf("expected %v, actual %v", expectedKey, actualKey)
}
}
func TestFilterBeforePredicate(t *testing.T) {
youngerThan := time.Hour
now := unversioned.Now()
old := unversioned.NewTime(now.Time.Add(-1 * youngerThan))
items := []*kapi.ReplicationController{}
items = append(items, withCreated(mockDeployment("a", "old", nil), old))
items = append(items, withCreated(mockDeployment("a", "new", nil), now))
filter := &andFilter{
filterPredicates: []FilterPredicate{NewFilterBeforePredicate(youngerThan)},
}
result := filter.Filter(items)
if len(result) != 1 {
t.Errorf("Unexpected number of results")
}
if expected, actual := "old", result[0].Name; expected != actual {
t.Errorf("expected %v, actual %v", expected, actual)
}
}
func TestEmptyDataSet(t *testing.T) {
deployments := []*kapi.ReplicationController{}
deploymentConfigs := []*deployapi.DeploymentConfig{}
dataSet := NewDataSet(deploymentConfigs, deployments)
_, exists, err := dataSet.GetDeploymentConfig(&kapi.ReplicationController{})
if exists || err != nil {
t.Errorf("Unexpected result %v, %v", exists, err)
}
deploymentConfigResults, err := dataSet.ListDeploymentConfigs()
if err != nil {
t.Errorf("Unexpected result %v", err)
}
if len(deploymentConfigResults) != 0 {
t.Errorf("Unexpected result %v", deploymentConfigResults)
}
deploymentResults, err := dataSet.ListDeployments()
if err != nil {
t.Errorf("Unexpected result %v", err)
}
if len(deploymentResults) != 0 {
t.Errorf("Unexpected result %v", deploymentResults)
}
deploymentResults, err = dataSet.ListDeploymentsByDeploymentConfig(&deployapi.DeploymentConfig{})
if err != nil {
t.Errorf("Unexpected result %v", err)
}
if len(deploymentResults) != 0 {
t.Errorf("Unexpected result %v", deploymentResults)
}
}
func TestPopulatedDataSet(t *testing.T) {
deploymentConfigs := []*deployapi.DeploymentConfig{
mockDeploymentConfig("a", "deployment-config-1"),
mockDeploymentConfig("b", "deployment-config-2"),
}
deployments := []*kapi.ReplicationController{
mockDeployment("a", "deployment-1", deploymentConfigs[0]),
mockDeployment("a", "deployment-2", deploymentConfigs[0]),
mockDeployment("b", "deployment-3", deploymentConfigs[1]),
mockDeployment("c", "deployment-4", nil),
}
dataSet := NewDataSet(deploymentConfigs, deployments)
for _, deployment := range deployments {
deploymentConfig, exists, err := dataSet.GetDeploymentConfig(deployment)
config, hasConfig := deployment.Annotations[deployapi.DeploymentConfigAnnotation]
if hasConfig {
if err != nil {
t.Errorf("Item %v, unexpected error: %v", deployment, err)
}
if !exists {
t.Errorf("Item %v, unexpected result: %v", deployment, exists)
}
if expected, actual := config, deploymentConfig.Name; expected != actual {
t.Errorf("expected %v, actual %v", expected, actual)
}
if expected, actual := deployment.Namespace, deploymentConfig.Namespace; expected != actual {
t.Errorf("expected %v, actual %v", expected, actual)
}
} else {
if err != nil {
t.Errorf("Item %v, unexpected error: %v", deployment, err)
}
if exists {
t.Errorf("Item %v, unexpected result: %v", deployment, exists)
}
}
}
expectedNames := sets.NewString("deployment-1", "deployment-2")
deploymentResults, err := dataSet.ListDeploymentsByDeploymentConfig(deploymentConfigs[0])
if err != nil {
t.Errorf("Unexpected result %v", err)
}
if len(deploymentResults) != len(expectedNames) {
t.Errorf("Unexpected result %v", deploymentResults)
}
for _, deployment := range deploymentResults {
if !expectedNames.Has(deployment.Name) {
t.Errorf("Unexpected name: %v", deployment.Name)
}
}
}