mirror of
https://github.com/redhat-developer/odo.git
synced 2025-10-19 03:06:19 +03:00
Expose oc build timeout in preference (#3232)
* Expose oc build timeout in preference * Fixing failures * Fixing make bin failure * Fixing make unit test failure * Fixing gofmt issue * Fixing UTs failure * Addressing review comments * Addressing review comment * Addressing review comment * Fixing timeout * Fixing failure * Added integration test * Update integration test scenario * Updated machine readable preference view * Consumed suggestion * Adding more unit tests * Addressed review comment
This commit is contained in:
@@ -58,6 +58,13 @@ func toPreferenceItems(prefInfo PreferenceInfo) []PreferenceItem {
|
||||
Type: getType(prefInfo.GetTimeout()),
|
||||
Description: TimeoutSettingDescription,
|
||||
},
|
||||
{
|
||||
Name: BuildTimeoutSetting,
|
||||
Value: odoSettings.BuildTimeout,
|
||||
Default: DefaultBuildTimeout,
|
||||
Type: getType(prefInfo.GetBuildTimeout()),
|
||||
Description: BuildTimeoutSettingDescription,
|
||||
},
|
||||
{
|
||||
Name: PushTimeoutSetting,
|
||||
Value: odoSettings.PushTimeout,
|
||||
|
||||
@@ -29,6 +29,9 @@ const (
|
||||
// DefaultPushTimeout is the default timeout for pods (in seconds)
|
||||
DefaultPushTimeout = 240
|
||||
|
||||
// DefaultBuildTimeout is the default build timeout for pods (in seconds)
|
||||
DefaultBuildTimeout = 300
|
||||
|
||||
// UpdateNotificationSetting is the name of the setting controlling update notification
|
||||
UpdateNotificationSetting = "UpdateNotification"
|
||||
|
||||
@@ -44,6 +47,9 @@ const (
|
||||
// TimeoutSetting is the name of the setting controlling timeout for connection check
|
||||
TimeoutSetting = "Timeout"
|
||||
|
||||
// BuildTimeoutSetting is the name of the setting controlling BuildTimeout
|
||||
BuildTimeoutSetting = "BuildTimeout"
|
||||
|
||||
// PushTimeoutSetting is the name of the setting controlling PushTimeout
|
||||
PushTimeoutSetting = "PushTimeout"
|
||||
|
||||
@@ -80,6 +86,9 @@ var TimeoutSettingDescription = fmt.Sprintf("Timeout (in seconds) for OpenShift
|
||||
// PushTimeoutSettingDescription adds a description for PushTimeout
|
||||
var PushTimeoutSettingDescription = fmt.Sprintf("PushTimeout (in seconds) for waiting for a Pod to come up (Default: %d)", DefaultPushTimeout)
|
||||
|
||||
// BuildTimeoutSettingDescription adds a description for BuildTimeout
|
||||
var BuildTimeoutSettingDescription = fmt.Sprintf("BuildTimeout (in seconds) for waiting for a build of the git component to complete (Default: %d)", DefaultBuildTimeout)
|
||||
|
||||
// This value can be provided to set a seperate directory for users 'homedir' resolution
|
||||
// note for mocking purpose ONLY
|
||||
var customHomeDir = os.Getenv("CUSTOM_HOMEDIR")
|
||||
@@ -90,6 +99,7 @@ var (
|
||||
UpdateNotificationSetting: UpdateNotificationSettingDescription,
|
||||
NamePrefixSetting: NamePrefixSettingDescription,
|
||||
TimeoutSetting: TimeoutSettingDescription,
|
||||
BuildTimeoutSetting: BuildTimeoutSettingDescription,
|
||||
PushTimeoutSetting: PushTimeoutSettingDescription,
|
||||
ExperimentalSetting: ExperimentalDescription,
|
||||
PushTargetSetting: PushTargetDescription,
|
||||
@@ -117,6 +127,9 @@ type OdoSettings struct {
|
||||
// Timeout for OpenShift server connection check
|
||||
Timeout *int `yaml:"Timeout,omitempty"`
|
||||
|
||||
// BuildTimeout for OpenShift build timeout check
|
||||
BuildTimeout *int `yaml:"BuildTimeout,omitempty"`
|
||||
|
||||
// PushTimeout for OpenShift pod timeout check
|
||||
PushTimeout *int `yaml:"PushTimeout,omitempty"`
|
||||
|
||||
@@ -334,6 +347,16 @@ func (c *PreferenceInfo) SetConfiguration(parameter string, value string) error
|
||||
}
|
||||
c.OdoSettings.Timeout = &typedval
|
||||
|
||||
case "buildtimeout":
|
||||
typedval, err := strconv.Atoi(value)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "unable to set %s to %s", parameter, value)
|
||||
}
|
||||
if typedval < 0 {
|
||||
return errors.Errorf("cannot set timeout to less than 0")
|
||||
}
|
||||
c.OdoSettings.BuildTimeout = &typedval
|
||||
|
||||
case "pushtimeout":
|
||||
typedval, err := strconv.Atoi(value)
|
||||
if err != nil {
|
||||
@@ -414,6 +437,15 @@ func (c *PreferenceInfo) GetTimeout() int {
|
||||
return *c.OdoSettings.Timeout
|
||||
}
|
||||
|
||||
// GetBuildTimeout gets the value set by BuildTimeout
|
||||
func (c *PreferenceInfo) GetBuildTimeout() int {
|
||||
// default timeout value is 300
|
||||
if c.OdoSettings.BuildTimeout == nil {
|
||||
return DefaultBuildTimeout
|
||||
}
|
||||
return *c.OdoSettings.BuildTimeout
|
||||
}
|
||||
|
||||
// GetPushTimeout gets the value set by PushTimeout
|
||||
func (c *PreferenceInfo) GetPushTimeout() int {
|
||||
// default timeout value is 1
|
||||
|
||||
@@ -56,6 +56,62 @@ func TestNew(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetBuildTimeout(t *testing.T) {
|
||||
tempConfigFile, err := ioutil.TempFile("", "odoconfig")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer tempConfigFile.Close()
|
||||
os.Setenv(GlobalConfigEnvName, tempConfigFile.Name())
|
||||
zeroValue := 0
|
||||
nonzeroValue := 5
|
||||
tests := []struct {
|
||||
name string
|
||||
existingConfig Preference
|
||||
want int
|
||||
}{
|
||||
{
|
||||
name: "Case 1: Validating default value from test case",
|
||||
existingConfig: Preference{},
|
||||
want: 300,
|
||||
},
|
||||
|
||||
{
|
||||
name: "Case 2: Validating value 0 from configuration",
|
||||
existingConfig: Preference{
|
||||
OdoSettings: OdoSettings{
|
||||
BuildTimeout: &zeroValue,
|
||||
},
|
||||
},
|
||||
want: 0,
|
||||
},
|
||||
|
||||
{
|
||||
name: "Case 3: Validating value 5 from configuration",
|
||||
existingConfig: Preference{
|
||||
OdoSettings: OdoSettings{
|
||||
BuildTimeout: &nonzeroValue,
|
||||
},
|
||||
},
|
||||
want: 5,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
cfg, err := NewPreferenceInfo()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
cfg.Preference = tt.existingConfig
|
||||
|
||||
output := cfg.GetBuildTimeout()
|
||||
if output != tt.want {
|
||||
t.Errorf("GetBuildTimeout returned unexpeced value expected \ngot: %d \nexpected: %d\n", output, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetPushTimeout(t *testing.T) {
|
||||
tempConfigFile, err := ioutil.TempFile("", "odoconfig")
|
||||
if err != nil {
|
||||
@@ -290,7 +346,37 @@ func TestSetConfiguration(t *testing.T) {
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 12: %s set to 300 with mixed case in parameter name", TimeoutSetting),
|
||||
name: fmt.Sprintf("Case 12: %s set to 50 with mixed case in parameter name", TimeoutSetting),
|
||||
parameter: "BuildTimeout",
|
||||
value: "50",
|
||||
existingConfig: Preference{},
|
||||
want: 50,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 13: %s set to 0", TimeoutSetting),
|
||||
parameter: TimeoutSetting,
|
||||
value: "0",
|
||||
existingConfig: Preference{},
|
||||
want: 0,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 14: %s set to -1 with mixed case in parameter name", TimeoutSetting),
|
||||
parameter: "BuildTimeout",
|
||||
value: "-1",
|
||||
existingConfig: Preference{},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 15: %s invalid value", TimeoutSetting),
|
||||
parameter: TimeoutSetting,
|
||||
value: "invalid",
|
||||
existingConfig: Preference{},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 16: %s set to 99 with mixed case in parameter name", TimeoutSetting),
|
||||
parameter: "PushTimeout",
|
||||
value: "99",
|
||||
existingConfig: Preference{},
|
||||
@@ -299,7 +385,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
},
|
||||
// experimental setting
|
||||
{
|
||||
name: fmt.Sprintf("Case 13: %s set nil to true", ExperimentalSetting),
|
||||
name: fmt.Sprintf("Case 17: %s set nil to true", ExperimentalSetting),
|
||||
parameter: ExperimentalSetting,
|
||||
value: "true",
|
||||
existingConfig: Preference{},
|
||||
@@ -307,7 +393,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 14: %s set true to false", ExperimentalSetting),
|
||||
name: fmt.Sprintf("Case 18: %s set true to false", ExperimentalSetting),
|
||||
parameter: ExperimentalSetting,
|
||||
value: "false",
|
||||
existingConfig: Preference{
|
||||
@@ -319,7 +405,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 15: %s set false to true", ExperimentalSetting),
|
||||
name: fmt.Sprintf("Case 19: %s set false to true", ExperimentalSetting),
|
||||
parameter: ExperimentalSetting,
|
||||
value: "true",
|
||||
existingConfig: Preference{
|
||||
@@ -331,7 +417,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 16: %s invalid value", ExperimentalSetting),
|
||||
name: fmt.Sprintf("Case 20: %s invalid value", ExperimentalSetting),
|
||||
parameter: ExperimentalSetting,
|
||||
value: "invalid_value",
|
||||
existingConfig: Preference{},
|
||||
@@ -339,7 +425,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
},
|
||||
// pushtarget setting
|
||||
{
|
||||
name: fmt.Sprintf("Case 17: %s set nil to docker", PushTargetSetting),
|
||||
name: fmt.Sprintf("Case 21: %s set nil to docker", PushTargetSetting),
|
||||
parameter: PushTargetSetting,
|
||||
value: dockerValue,
|
||||
existingConfig: Preference{},
|
||||
@@ -347,7 +433,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 18: %s set kube to docker", PushTargetSetting),
|
||||
name: fmt.Sprintf("Case 22: %s set kube to docker", PushTargetSetting),
|
||||
parameter: PushTargetSetting,
|
||||
value: dockerValue,
|
||||
existingConfig: Preference{
|
||||
@@ -359,7 +445,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 19: %s set docker to kube", PushTargetSetting),
|
||||
name: fmt.Sprintf("Case 23: %s set docker to kube", PushTargetSetting),
|
||||
parameter: PushTargetSetting,
|
||||
value: kubeValue,
|
||||
existingConfig: Preference{
|
||||
@@ -371,7 +457,7 @@ func TestSetConfiguration(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 20: %s invalid value", PushTargetSetting),
|
||||
name: fmt.Sprintf("Case 24: %s invalid value", PushTargetSetting),
|
||||
parameter: PushTargetSetting,
|
||||
value: "invalid_value",
|
||||
existingConfig: Preference{},
|
||||
@@ -606,8 +692,10 @@ Available Parameters:
|
||||
%s - %s
|
||||
%s - %s
|
||||
%s - %s
|
||||
%s - %s
|
||||
`
|
||||
expected = fmt.Sprintf(expected,
|
||||
BuildTimeoutSetting, BuildTimeoutSettingDescription,
|
||||
ExperimentalSetting, ExperimentalDescription,
|
||||
NamePrefixSetting, NamePrefixSettingDescription,
|
||||
PushTargetSetting, PushTargetDescription,
|
||||
@@ -621,7 +709,7 @@ Available Parameters:
|
||||
}
|
||||
|
||||
func TestLowerCaseParameters(t *testing.T) {
|
||||
expected := map[string]bool{"nameprefix": true, "pushtimeout": true, "timeout": true, "updatenotification": true, "experimental": true, "pushtarget": true}
|
||||
expected := map[string]bool{"nameprefix": true, "buildtimeout": true, "pushtimeout": true, "timeout": true, "updatenotification": true, "experimental": true, "pushtarget": true}
|
||||
actual := util.GetLowerCaseParameters(GetSupportedParameters())
|
||||
if !reflect.DeepEqual(expected, actual) {
|
||||
t.Errorf("expected '%v', got '%v'", expected, actual)
|
||||
|
||||
Reference in New Issue
Block a user