github.com/cloudfoundry/postgres-release/src/acceptance-tests@v0.0.0-20240511030151-872bdd2e0dba/testing/helpers/versions.go (about)

     1  package helpers
     2  
     3  import (
     4  	"io/ioutil"
     5  	"sort"
     6  	"strings"
     7  
     8  	yaml "gopkg.in/yaml.v2"
     9  )
    10  
    11  var defaultVersionsFile string = "../versions.yml"
    12  var brokenVersions = []int{45}
    13  
    14  type PostgresReleaseVersions struct {
    15  	sortedKeys []int
    16  	Versions   map[int]string `yaml:"versions"`
    17  }
    18  
    19  func NewPostgresReleaseVersions(versionFile string) (PostgresReleaseVersions, error) {
    20  	var versions PostgresReleaseVersions
    21  
    22  	if versionFile == "" {
    23  		versionFile = defaultVersionsFile
    24  	}
    25  
    26  	data, err := ioutil.ReadFile(versionFile)
    27  	if err != nil {
    28  		return PostgresReleaseVersions{}, err
    29  	}
    30  	if err := yaml.Unmarshal(data, &versions); err != nil {
    31  		return PostgresReleaseVersions{}, err
    32  	}
    33  	for _, brokenVersion := range brokenVersions {
    34  		delete(versions.Versions, brokenVersion)
    35  	}
    36  	for key := range versions.Versions {
    37  		versions.sortedKeys = append(versions.sortedKeys, key)
    38  	}
    39  	sort.Ints(versions.sortedKeys)
    40  
    41  	return versions, nil
    42  }
    43  
    44  func (v PostgresReleaseVersions) GetOldVersion() int {
    45  	return v.sortedKeys[len(v.sortedKeys)-2]
    46  }
    47  
    48  func (v PostgresReleaseVersions) GetLatestVersion() int {
    49  	return v.sortedKeys[len(v.sortedKeys)-1]
    50  }
    51  
    52  func (v PostgresReleaseVersions) GetPostgreSQLVersion(key int) string {
    53  	return v.Versions[key]
    54  }
    55  
    56  func (v PostgresReleaseVersions) IsMajor(current string, key int) bool {
    57  	value1 := strings.Split(v.Versions[key], ".")
    58  	value2 := strings.Split(current, ".")
    59  	if strings.Join(value1[:len(value1)-1], ".") == strings.Join(value2[:len(value2)-1], ".") {
    60  		return false
    61  	}
    62  	return true
    63  }