Hello community,

here is the log from the commit of package yast2-ntp-client for 
openSUSE:Leap:15.2 checked in at 2020-02-27 06:41:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/yast2-ntp-client (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.yast2-ntp-client.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-ntp-client"

Thu Feb 27 06:41:24 2020 rev:69 rq:779096 version:4.2.8

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/yast2-ntp-client/yast2-ntp-client.changes      
2020-02-04 17:54:35.452755479 +0100
+++ 
/work/SRC/openSUSE:Leap:15.2/.yast2-ntp-client.new.26092/yast2-ntp-client.changes
   2020-02-27 06:41:25.601600028 +0100
@@ -1,0 +2,6 @@
+Wed Feb 19 13:24:06 UTC 2020 - Imobach Gonzalez Sosa <[email protected]>
+
+- Rely on the new Y2Network::NtpServer class (jsc#SLE-7188).
+- 4.2.8
+
+-------------------------------------------------------------------

Old:
----
  yast2-ntp-client-4.2.7.tar.bz2

New:
----
  yast2-ntp-client-4.2.8.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-ntp-client.spec ++++++
--- /var/tmp/diff_new_pack.FFQiQy/_old  2020-02-27 06:41:25.861600569 +0100
+++ /var/tmp/diff_new_pack.FFQiQy/_new  2020-02-27 06:41:25.861600569 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-ntp-client
-Version:        4.2.7
+Version:        4.2.8
 Release:        0
 Summary:        YaST2 - NTP Client Configuration
 License:        GPL-2.0-or-later
@@ -39,6 +39,8 @@
 BuildRequires:  rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
 BuildRequires:  rubygem(%rb_default_ruby_abi:rspec)
 BuildRequires:  rubygem(%rb_default_ruby_abi:yast-rake)
+# Y2Network::NtpServer
+BuildRequires:  yast2-network >= 4.2.55
 
 # proper acting TargetFile when scr is switched
 Requires:       augeas-lenses
@@ -46,8 +48,8 @@
 Requires:       yast2 >= 4.1.15
 Requires:       yast2-country-data
 # needed for network/config agent
-# Yast::Lan.dhcp_ntp_servers
-Requires:       yast2-network >= 4.1.17
+# Y2Network::NtpServer
+Requires:       yast2-network >= 4.2.55
 Requires:       yast2-ruby-bindings >= 1.0.0
 Requires:       rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
 

++++++ yast2-ntp-client-4.2.7.tar.bz2 -> yast2-ntp-client-4.2.8.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-ntp-client-4.2.7/package/yast2-ntp-client.changes 
new/yast2-ntp-client-4.2.8/package/yast2-ntp-client.changes
--- old/yast2-ntp-client-4.2.7/package/yast2-ntp-client.changes 2020-01-23 
14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/package/yast2-ntp-client.changes 2020-02-21 
00:15:07.000000000 +0100
@@ -1,4 +1,10 @@
 -------------------------------------------------------------------
+Wed Feb 19 13:24:06 UTC 2020 - Imobach Gonzalez Sosa <[email protected]>
+
+- Rely on the new Y2Network::NtpServer class (jsc#SLE-7188).
+- 4.2.8
+
+-------------------------------------------------------------------
 Thu Jan 23 12:58:04 UTC 2020 - Steffen Winterfeldt <[email protected]>
 
 - don't use /bin/systemctl compat symlink (bsc#1160890)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-ntp-client-4.2.7/package/yast2-ntp-client.spec 
new/yast2-ntp-client-4.2.8/package/yast2-ntp-client.spec
--- old/yast2-ntp-client-4.2.7/package/yast2-ntp-client.spec    2020-01-23 
14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/package/yast2-ntp-client.spec    2020-02-21 
00:15:07.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-ntp-client
-Version:        4.2.7
+Version:        4.2.8
 Release:        0
 Summary:        YaST2 - NTP Client Configuration
 License:        GPL-2.0-or-later
@@ -39,6 +39,8 @@
 BuildRequires:  rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
 BuildRequires:  rubygem(%rb_default_ruby_abi:rspec)
 BuildRequires:  rubygem(%rb_default_ruby_abi:yast-rake)
+# Y2Network::NtpServer
+BuildRequires:  yast2-network >= 4.2.55
 
 # proper acting TargetFile when scr is switched
 Requires:       augeas-lenses
@@ -46,8 +48,8 @@
 Requires:       yast2 >= 4.1.15
 Requires:       yast2-country-data
 # needed for network/config agent
-# Yast::Lan.dhcp_ntp_servers
-Requires:       yast2-network >= 4.1.17
+# Y2Network::NtpServer
+Requires:       yast2-network >= 4.2.55
 Requires:       yast2-ruby-bindings >= 1.0.0
 Requires:       rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-ntp-client-4.2.7/src/clients/ntp-client_proposal.rb 
new/yast2-ntp-client-4.2.8/src/clients/ntp-client_proposal.rb
--- old/yast2-ntp-client-4.2.7/src/clients/ntp-client_proposal.rb       
2020-01-23 14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/src/clients/ntp-client_proposal.rb       
2020-02-21 00:15:07.000000000 +0100
@@ -491,7 +491,12 @@
     # @return [Array<Yast::Term>] ntp address Item
     def timezone_ntp_items
       timezone_country = Timezone.GetCountryForTimezone(Timezone.timezone)
-      NtpClient.GetNtpServersByCountry(timezone_country, true)
+      servers = NtpClient.country_ntp_servers(timezone_country)
+      # Select the first occurrence of pool.ntp.org as the default option 
(bnc#940881)
+      selected = servers.find { |s| s.hostname.end_with?("pool.ntp.org") }
+      servers.map do |server|
+        Item(Id(server.hostname), server.hostname, server.hostname == selected)
+      end
     end
 
     # List of dhcp ntp servers Yast::Term items with the ntp address ID and
@@ -499,7 +504,7 @@
     #
     # @return [Array<Yast::Term>] ntp address table Item
     def dhcp_ntp_items
-      NtpClient.dhcp_ntp_servers.map { |s| Item(Id(s), s) }
+      NtpClient.dhcp_ntp_servers.map { |s| Item(Id(s.hostname), s.hostname) }
     end
 
     # List of ntp servers Yast::Term items with the ntp address ID and label
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-ntp-client-4.2.7/src/lib/y2ntp_client/widgets/pool_widgets.rb 
new/yast2-ntp-client-4.2.8/src/lib/y2ntp_client/widgets/pool_widgets.rb
--- old/yast2-ntp-client-4.2.7/src/lib/y2ntp_client/widgets/pool_widgets.rb     
2020-01-23 14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/src/lib/y2ntp_client/widgets/pool_widgets.rb     
2020-02-21 00:15:07.000000000 +0100
@@ -308,8 +308,15 @@
 
     private
 
+      # Returns the country for the given address
+      #
+      # FIXME: if the UI used a proper object instead of just a string, this
+      # method will not be needed.
+      #
+      # @param address [String] Server address
       def country_for(address)
-        Yast::NtpClient.GetNtpServers.fetch(address, {})["country"]
+        server = Yast::NtpClient.public_ntp_servers.find { |s| s.hostname == 
address }
+        server ? server.country : nil
       end
     end
 
@@ -382,7 +389,7 @@
 
       # macro seeItemsSelection
       def items
-        ntp_servers.map { |s, v| [s, "#{s} (#{v["country"]})"] }
+        ntp_servers.map { |s| [s.hostname, "#{s.hostname} (#{s.country})"] }
       end
 
       def refresh(country)
@@ -393,10 +400,10 @@
     private
 
       def ntp_servers
-        servers = Yast::NtpClient.GetNtpServers
+        servers = Yast::NtpClient.public_ntp_servers
         return servers if @country.to_s.empty?
 
-        servers.find_all { |_s, v| v["country"] == @country }
+        servers.select { |s| s.country == @country }
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-ntp-client-4.2.7/src/modules/NtpClient.rb 
new/yast2-ntp-client-4.2.8/src/modules/NtpClient.rb
--- old/yast2-ntp-client-4.2.7/src/modules/NtpClient.rb 2020-01-23 
14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/src/modules/NtpClient.rb 2020-02-21 
00:15:07.000000000 +0100
@@ -14,6 +14,7 @@
 require "ui/text_helpers"
 require "erb"
 require "yast2/systemctl"
+require "y2network/ntp_server"
 
 module Yast
   class NtpClientClass < Module
@@ -193,7 +194,33 @@
       }
     end
 
+    # Returns the know ntp servers
+    #
+    # @return [Array<Y2Network::NtpServer>] Known NTP servers
+    def public_ntp_servers
+      update_ntp_servers! if @ntp_servers.nil?
+      @ntp_servers.values.map do |srv|
+        Y2Network::NtpServer.new(
+          srv["address"], country: srv["country"], location: srv["location"]
+        )
+      end
+    end
+
+    # Returns the NTP servers for the given country
+    #
+    # @param country [String] Country code
+    # @return [Array<Y2Network::NtpServer>] NTP servers for the given country
+    def country_ntp_servers(country)
+      normalized_country = country.upcase
+      servers = public_ntp_servers.select { |s| s.country.upcase == 
normalized_country }
+      # bnc#458917 add country, in case data/country.ycp does not have it
+      country_server = make_country_ntp_server(country)
+      servers << country_server unless 
servers.map(&:hostname).include?(country_server.hostname)
+      servers
+    end
+
     # Get the list of known NTP servers
+    # @deprecated Use public_ntp_servers instead
     # @return a list of known NTP servers
     def GetNtpServers
       update_ntp_servers! if @ntp_servers.nil?
@@ -219,9 +246,11 @@
     end
 
     # Get list of public NTP servers for a country
+    #
     # @param [String] country two-letter country code
     # @param [Boolean] terse_output display additional data (location etc.)
     # @return [Array] of servers (usable as combo-box items)
+    # @deprecated Use public_ntp_servers_by_country instead
     def GetNtpServersByCountry(country, terse_output)
       country_names = {}
       servers = GetNtpServers()
@@ -593,7 +622,7 @@
     # Convenience method to obtain the list of ntp servers proposed by DHCP
     # @see https://www.rubydoc.info/github/yast/yast-network/Yast/LanClass:${0}
     def dhcp_ntp_servers
-      Yast::Lan.dhcp_ntp_servers
+      Yast::Lan.dhcp_ntp_servers.map { |s| Y2Network::NtpServer.new(s) }
     end
 
     publish variable: :AbortFunction, type: "boolean ()"
@@ -919,6 +948,7 @@
     # @return [Array <Hash>] pool records for given countries
     def pool_servers_for(known_countries)
       known_countries.map do |short_country, country_name|
+        # bnc#458917 add country, in case data/country.ycp does not have it
         MakePoolRecord(short_country, country_name)
       end
     end
@@ -945,6 +975,15 @@
 
       Yast::Report.Error(wrap_text(msg, width - 4))
     end
+
+    # Pool server for the given country
+    #
+    # @param country [String] Country code
+    # @return [Y2Network::NtpServer]
+    def make_country_ntp_server(country)
+      record = MakePoolRecord(country, "")
+      Y2Network::NtpServer.new(record["address"], country: record["country"])
+    end
   end
 
   NtpClient = NtpClientClass.new
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-ntp-client-4.2.7/test/data/ntp_servers_sample.yml 
new/yast2-ntp-client-4.2.8/test/data/ntp_servers_sample.yml
--- old/yast2-ntp-client-4.2.7/test/data/ntp_servers_sample.yml 1970-01-01 
01:00:00.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/test/data/ntp_servers_sample.yml 2020-02-21 
00:15:07.000000000 +0100
@@ -0,0 +1,16 @@
+---
+
+- access_policy: open access
+  address: ntp.cgi.cz
+  country: CZ
+  exact_location: Prague, The Czech Republic
+  location: Czech Republic
+  stratum: '2'
+  synchronization: NTP V4 secondary (stratum 2), PC/FreebSD
+
+- address: tick.fh-augsburg.de
+  country: DE
+  exact_location: Augsburg University of Applied Sciences (FH), Augsburg, 
Bavaria,
+    Germany
+  stratum: '2'
+  synchronization: NTP V3 secondary (stratum 2), i486/Linux
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-ntp-client-4.2.7/test/ntp_client_proposal_test.rb 
new/yast2-ntp-client-4.2.8/test/ntp_client_proposal_test.rb
--- old/yast2-ntp-client-4.2.7/test/ntp_client_proposal_test.rb 2020-01-23 
14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/test/ntp_client_proposal_test.rb 2020-02-21 
00:15:07.000000000 +0100
@@ -13,6 +13,81 @@
     client
   end
 
+  describe "#MakeProposal" do
+    let(:dhcp_ntp_servers) { [] }
+    let(:config_was_read?) { false }
+    let(:ntp_was_selected?) { false }
+
+    before do
+      allow(Yast::Lan).to receive(:dhcp_ntp_servers)
+        .and_return(dhcp_ntp_servers)
+
+      allow(Yast::NtpClient).to receive(:country_ntp_servers).with("de")
+        .and_return([Y2Network::NtpServer.new("de.pool.ntp.org")])
+      allow(Yast::Timezone).to receive(:timezone).and_return("Europe/Berlin")
+      allow(Yast::Timezone).to receive(:GetCountryForTimezone)
+        .with("Europe/Berlin").and_return("de")
+      allow(Yast::NtpClient).to 
receive(:config_has_been_read).and_return(config_was_read?)
+      allow(Yast::NtpClient).to 
receive(:ntp_selected).and_return(ntp_was_selected?)
+      allow(Yast::NtpClient).to receive(:GetUsedNtpServers)
+        .and_return(["2.opensuse.pool.ntp.org"])
+    end
+
+    context "when NTP servers were found via DHCP" do
+      let(:dhcp_ntp_servers) { ["test.example.net"] }
+
+      it "proposes only the found servers" do
+        expect(Yast::UI).to receive(:ChangeWidget) do |*args|
+          items = args.last
+          hostnames = items.map { |i| i[1] }
+          expect(hostnames).to eq(
+            ["test.example.net"]
+          )
+        end
+        subject.MakeProposal
+      end
+    end
+
+    context "when no NTP server were found via DHCP" do
+      let(:dhcp_ntp_servers) { [] }
+
+      it "proposes the known public servers for the current timezone" do
+        expect(Yast::UI).to receive(:ChangeWidget) do |*args|
+          items = args.last
+          hostnames = items.map { |i| i[1] }
+          expect(hostnames).to eq(["de.pool.ntp.org"])
+        end
+        subject.MakeProposal
+      end
+    end
+
+    context "when the NTP configuration has been read (from chrony)" do
+      let(:config_was_read?) { true }
+
+      it "proposes the known public servers for the current timezone" do
+        expect(Yast::UI).to receive(:ChangeWidget) do |*args|
+          items = args.last
+          hostnames = items.map { |i| i[1] }
+          expect(hostnames).to eq(["2.opensuse.pool.ntp.org"])
+        end
+        subject.MakeProposal
+      end
+    end
+
+    context "when the NTP server was already selected" do
+      let(:ntp_was_selected?) { true }
+
+      it "proposes the known public servers for the current timezone" do
+        expect(Yast::UI).to receive(:ChangeWidget) do |*args|
+          items = args.last
+          hostnames = items.map { |i| i[1] }
+          expect(hostnames).to eq(["2.opensuse.pool.ntp.org"])
+        end
+        subject.MakeProposal
+      end
+    end
+  end
+
   describe "#Write" do
     let(:ntp_server) { "fake.pool.ntp.org" }
     let(:write_only) { false }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-ntp-client-4.2.7/test/ntp_client_test.rb 
new/yast2-ntp-client-4.2.8/test/ntp_client_test.rb
--- old/yast2-ntp-client-4.2.7/test/ntp_client_test.rb  2020-01-23 
14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/test/ntp_client_test.rb  2020-02-21 
00:15:07.000000000 +0100
@@ -340,6 +340,38 @@
     end
   end
 
+  describe "#public_ntp_servers" do
+    before do
+      allow(subject).to receive(:GetAllKnownCountries)
+        .and_return("DE" => "Germany", "CZ" => "Czech Republic")
+      allow(Yast::Directory).to 
receive(:find_data_file).with("ntp_servers.yml")
+        .and_return(DATA_PATH.join("ntp_servers_sample.yml").to_s)
+    end
+
+    it "returns the list of public NTP servers including the default one for 
each country" do
+      servers = subject.public_ntp_servers
+      expect(servers.map(&:hostname)).to eq(
+        ["ntp.cgi.cz", "tick.fh-augsburg.de", "de.pool.ntp.org", 
"cz.pool.ntp.org"]
+      )
+    end
+  end
+
+  describe "#country_ntp_servers" do
+    before do
+      allow(subject).to receive(:GetAllKnownCountries)
+        .and_return("DE" => "Germany", "CZ" => "Czech Republic")
+      allow(Yast::Directory).to 
receive(:find_data_file).with("ntp_servers.yml")
+        .and_return(DATA_PATH.join("ntp_servers_sample.yml").to_s)
+    end
+
+    it "returns the list of public NTP servers for the given country" do
+      servers = subject.country_ntp_servers("DE")
+      expect(servers.map(&:hostname)).to eq(
+        ["tick.fh-augsburg.de", "de.pool.ntp.org"]
+      )
+    end
+  end
+
   describe "#MakePoolRecord" do
     let(:record) do
       {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-ntp-client-4.2.7/test/test_helper.rb 
new/yast2-ntp-client-4.2.8/test/test_helper.rb
--- old/yast2-ntp-client-4.2.7/test/test_helper.rb      2020-01-23 
14:15:51.000000000 +0100
+++ new/yast2-ntp-client-4.2.8/test/test_helper.rb      2020-02-21 
00:15:07.000000000 +0100
@@ -4,6 +4,10 @@
 require "yast"
 require "yast/rspec"
 require "yaml"
+require "pathname"
+
+TESTS_PATH = Pathname.new(File.dirname(__FILE__))
+DATA_PATH = TESTS_PATH.join("data")
 
 RSpec.configure do |config|
   config.mock_with :rspec do |mocks|
@@ -18,12 +22,18 @@
 
 # stub module to prevent its Import
 # Useful for modules from different yast packages, to avoid build dependencies
-def stub_module(name)
-  Yast.const_set(name.to_sym, Class.new { def self.fake_method; end })
+def stub_module(name, fake_class = nil)
+  fake_class = Class.new { def self.fake_method; end } if fake_class.nil?
+  Yast.const_set name.to_sym, fake_class
 end
 
 # stub classes from other modules to speed up a build
-stub_module("Lan")
+lan = Class.new do
+  def dhcp_ntp_servers
+    []
+  end
+end
+stub_module("Lan", lan)
 stub_module("Language")
 stub_module("Pkg")
 stub_module("PackageCallbacks")


Reply via email to