File: rpm_spec.rb

package info (click to toggle)
puppet-agent 7.23.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 19,092 kB
  • sloc: ruby: 245,074; sh: 456; makefile: 38; xml: 33
file content (121 lines) | stat: -rw-r--r-- 4,015 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
require 'spec_helper'
require 'puppet/util/package/version/rpm'

describe Puppet::Util::Package::Version::Rpm do

  context "when parsing an invalid version" do
    it "raises ArgumentError" do
      expect { described_class.parse(:absent)}.to raise_error(ArgumentError)
    end
  end

  context "when creating new version" do
    it "is parsing basic version" do
      v = described_class.parse('1:2.8.8-1.el6')
      expect([v.epoch, v.version, v.release, v.arch ]).to eq(['1', '2.8.8', '1.el6' , nil])
    end

    it "is parsing no epoch basic version" do
      v = described_class.parse('2.8.8-1.el6')
      expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '2.8.8', '1.el6', nil])
    end

    it "is parsing no epoch basic short version" do
      v = described_class.parse('7.15-8.fc29')
      expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '7.15', '8.fc29', nil])
    end

    it "is parsing no epoch and no release basic version" do
      v = described_class.parse('2.8.8')
      expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '2.8.8', nil, nil])
    end

    it "is parsing no epoch complex version" do
      v = described_class.parse('1.4-0.24.20120830CVS.fc31')
      expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '1.4', '0.24.20120830CVS.fc31', nil])
    end
  end

  context "when comparing two versions" do
    context 'with invalid version' do
      it 'raises ArgumentError' do
        version = described_class.parse('0:1.5.3-3.el6')
        invalid = 'invalid'
        expect { version < invalid }.to \
          raise_error(ArgumentError, 'Cannot compare, as invalid is not a Rpm Version')
      end
    end

    context 'with valid versions' do
      it "epoch has precedence" do
        lower = described_class.parse('0:1.5.3-3.el6')
        higher = described_class.parse('1:1.7.0-15.fc29')
        expect(lower).to be < higher
      end

      it 'handles no epoch as 0 epoch' do
        lower = described_class.parse('1.5.3-3.el6')
        higher = described_class.parse('1:1.7.0-15.fc29')
        expect(lower).to be < higher
      end

      it "handles equals letters-only versions" do
        first = described_class.parse('abd-def')
        second = described_class.parse('abd-def')
        expect(first).to eq(second)
      end

      it "shorter version is smaller letters-only versions" do
        lower = described_class.parse('ab')
        higher = described_class.parse('abd')
        expect(lower).to be < higher
      end

      it "shorter version is smaller even with digits" do
        lower = described_class.parse('1.7')
        higher = described_class.parse('1.7.0')
        expect(lower).to be < higher
      end

      it "shorter version is smaller when number is less" do
        lower = described_class.parse('1.7.0')
        higher = described_class.parse('1.7.1')
        expect(lower).to be < higher
      end

      it "shorter release is smaller " do
        lower = described_class.parse('1.7.0-11.fc26')
        higher = described_class.parse('1.7.0-11.fc27')
        expect(lower).to be < higher
      end

      it "release letters are smaller letters-only" do
        lower = described_class.parse('1.7.0-abc')
        higher = described_class.parse('1.7.0-abd')
        expect(lower).to be < higher
      end

      it "shorter release is smaller" do
        lower = described_class.parse('1.7.0-11.fc2')
        higher = described_class.parse('1.7.0-11.fc17')
        expect(lower).to be < higher
      end

      it "handles equal release" do
        first = described_class.parse('1.7.0-11.fc27')
        second = described_class.parse('1.7.0-11.fc27')
        expect(first).to eq(second)
      end
    end

    context 'when one has no epoch' do
      it 'handles no epoch as zero' do
        version1 = described_class.parse('1:1.2')
        version2 = described_class.parse('1.4')

        expect(version1).to be > version2
        expect(version2).to be < version1
      end
    end
  end
end