diff --git a/builder/openstack/run_config_test.go b/builder/openstack/run_config_test.go index 36b9e5716..f660a4e82 100644 --- a/builder/openstack/run_config_test.go +++ b/builder/openstack/run_config_test.go @@ -6,6 +6,7 @@ import ( "github.com/gophercloud/gophercloud/openstack/imageservice/v2/images" "github.com/hashicorp/packer/helper/communicator" + "github.com/mitchellh/mapstructure" ) func init() { @@ -157,3 +158,55 @@ func TestBuildImageFilter(t *testing.T) { t.Errorf("Owner did not build correctly: %s", listOpts.Owner) } } + +func TestBuildBadImageFilter(t *testing.T) { + filterMap := map[string]interface{}{ + "limit": "3", + "size_min": "25", + } + + filters := ImageFilterOptions{} + mapstructure.Decode(filterMap, &filters) + listOpts, err := filters.Build() + + if err != nil { + t.Errorf("Error returned processing image filter: %s", err.Error()) + return // we cannot trust listOpts to not cause unexpected behaviour + } + + if listOpts.Limit == filterMap["limit"] { + t.Errorf("Limit was parsed into ListOpts: %d", listOpts.Limit) + } + + if listOpts.SizeMin != 0 { + t.Errorf("SizeMin was parsed into ListOpts: %d", listOpts.SizeMin) + } + + if listOpts.Sort != "created_at:desc" { + t.Errorf("Sort was not applied: %s", listOpts.Sort) + } + + if !filters.Empty() { + t.Errorf("The filters should be empty due to lack of input") + } +} + +// Tests that the Empty method on ImageFilterOptions works as expected +func TestImageFiltersEmpty(t *testing.T) { + filledFilters := ImageFilterOptions{ + Name: "Ubuntu 16.04", + Visibility: "public", + Owner: "1234567890", + Tags: []string{"prod", "ready"}, + } + + if filledFilters.Empty() { + t.Errorf("Expected filled filters to be non-empty: %v", filledFilters) + } + + emptyFilters := ImageFilterOptions{} + + if !emptyFilters.Empty() { + t.Errorf("Expected default filter to be empty: %v", emptyFilters) + } +}