Skip to content

Commit

Permalink
Read default ntp servers from control file
Browse files Browse the repository at this point in the history
  • Loading branch information
teclator committed Sep 7, 2021
1 parent 5fb4d36 commit f53562a
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 30 deletions.
16 changes: 15 additions & 1 deletion src/lib/y2network/ntp_server.rb
Expand Up @@ -30,6 +30,7 @@ module Y2Network
# in the future as needed.
class NtpServer
include Yast2::Equatable
include Yast::Logger

# @return [String] Server's hostname
attr_reader :hostname
Expand All @@ -53,6 +54,10 @@ class << self
# @param products [Array<Hash>] List of base products
# @return [Array<NtpServer>] Default NTP servers
def default_servers(products = nil)
(control_servers || product_servers(products)).map { |s| new(s) }
end

def product_servers(products)
base_products = products || Yast::Product.FindBaseProducts

host =
Expand All @@ -62,7 +67,16 @@ def default_servers(products = nil)
"suse"
end

(0..DEFAULT_SERVERS - 1).map { |i| new("#{i}.#{host}.#{DEFAULT_SUBDOMAIN}") }
log.info "Using ntp product servers (#{host})"

(0..DEFAULT_SERVERS - 1).map { |i| "#{i}.#{host}.#{DEFAULT_SUBDOMAIN}" }
end

def control_servers
Yast.import "ProductFeatures"
servers = Yast::ProductFeatures.GetSection("globals")["default_ntp_servers"]
log.info "Using the servers defined in the control file: #{servers.inspect}"
servers
end
end

Expand Down
81 changes: 52 additions & 29 deletions test/y2network/ntp_server_test.rb
Expand Up @@ -23,49 +23,72 @@

describe Y2Network::NtpServer do
describe ".default_servers" do
let(:servers) { nil }
let(:globals) { { "default_ntp_servers" => servers } }

before do
allow(Yast::Product).to receive(:FindBaseProducts)
.and_return(products)
allow(Yast::ProductFeatures).to receive(:GetSection).with("globals").and_return(globals)
end

context "when running in an openSUSE system" do
let(:products) do
[{ "name" => "openSUSE" }]
context "when defined a list of servers in the control file" do
let(:servers) { ["1.suse.pool.ntp.org", "2.suse.pool.ntp.org"] }

it "returns the list of defined servers" do
expect(described_class.default_servers.map(&:hostname)).to eql(servers)
end

it "returns a set of opensuse.pool.ntp.org servers" do
domain = "opensuse.pool.ntp.org"
expect(described_class.default_servers.map(&:hostname)).to eq(
["0.#{domain}", "1.#{domain}", "2.#{domain}", "3.#{domain}"]
)
context "and the list of servers is empty" do
it "returns an empty list" do
expect(described_class.default_servers.map(&:hostname)).to eql(servers)
end
end
end

context "when not running in an openSUSE system" do
let(:products) do
[{ "name" => "SLES" }]
context "when no defined a list of servers in the control file" do
before do
allow(Yast::Product).to receive(:FindBaseProducts)
.and_return(products)
end

it "returns a set of suse.pool.ntp.org servers" do
domain = "suse.pool.ntp.org"
expect(described_class.default_servers.map(&:hostname)).to eq(
["0.#{domain}", "1.#{domain}", "2.#{domain}", "3.#{domain}"]
)
context "when running in an openSUSE system" do
let(:products) do
[{ "name" => "openSUSE" }]
end

it "returns a set of opensuse.pool.ntp.org servers" do
domain = "opensuse.pool.ntp.org"
expect(described_class.default_servers.map(&:hostname)).to eq(
["0.#{domain}", "1.#{domain}", "2.#{domain}", "3.#{domain}"]
)
end
end
end

context "when a list of base product is given" do
let(:products) do
[{ "name" => "openSUSE" }]
context "when not running in an openSUSE system" do
let(:products) do
[{ "name" => "SLES" }]
end

it "returns a set of suse.pool.ntp.org servers" do
domain = "suse.pool.ntp.org"
expect(described_class.default_servers.map(&:hostname)).to eq(
["0.#{domain}", "1.#{domain}", "2.#{domain}", "3.#{domain}"]
)
end
end

it "returns the set of servers for that product" do
domain = "opensuse.pool.ntp.org"
expect(Yast::Product).to_not receive(:FindBaseProducts)
servers = described_class.default_servers(products)
expect(servers.map(&:hostname)).to eq(
["0.#{domain}", "1.#{domain}", "2.#{domain}", "3.#{domain}"]
)
context "when a list of base product is given" do
let(:products) do
[{ "name" => "openSUSE" }]
end

it "returns the set of servers for that product" do
domain = "opensuse.pool.ntp.org"
expect(Yast::Product).to_not receive(:FindBaseProducts)
servers = described_class.default_servers(products)
expect(servers.map(&:hostname)).to eq(
["0.#{domain}", "1.#{domain}", "2.#{domain}", "3.#{domain}"]
)
end
end
end
end
Expand Down

0 comments on commit f53562a

Please sign in to comment.