Hello,
The time estimate display is broken, so I wrote a test for it.
Also the bug should be fixed now.

https://fedorahosted.org/freeipa/ticket/4242

--
PetrĀ³
From 4aee528f2f3085157ee9b1c888d4c35db45b694b Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Wed, 12 Mar 2014 12:59:46 +0100
Subject: [PATCH] ipaserver.install.service: Fix estimated time display

Use basic math rather than timezone conversion to get
minutes and seconds.
Break out the message generation into a small tested function.

https://fedorahosted.org/freeipa/ticket/4242
---
 ipaserver/install/service.py                       | 30 ++++++++++--------
 .../test_ipaserver/test_install/test_service.py    | 36 ++++++++++++++++++++++
 2 files changed, 53 insertions(+), 13 deletions(-)
 create mode 100644 ipatests/test_ipaserver/test_install/test_service.py

diff --git a/ipaserver/install/service.py b/ipaserver/install/service.py
index 0d7a664561fdf2b02353dd7284392e250f61a9f2..5d5db966f2616b27ba02cfb60e0e6cbf566d981b 100644
--- a/ipaserver/install/service.py
+++ b/ipaserver/install/service.py
@@ -58,6 +58,21 @@ def print_msg(message, output_fd=sys.stdout):
     output_fd.flush()
 
 
+def format_seconds(seconds):
+    """Format a number of seconds as an English minutes+seconds message"""
+    parts = []
+    minutes, seconds = divmod(seconds, 60)
+    if minutes:
+        parts.append('%d minute' % minutes)
+        if minutes != 1:
+            parts[-1] += 's'
+    if seconds or not minutes:
+        parts.append('%d second' % seconds)
+        if seconds != 1:
+            parts[-1] += 's'
+    return ' '.join(parts)
+
+
 class Service(object):
     def __init__(self, service_name, service_desc=None, sstore=None, dm_password=None, ldapi=True, autobind=AUTO):
         self.service_name = service_name
@@ -341,19 +356,8 @@ def start_creation(self, start_message=None, end_message=None,
                     end_message = "Done configuring %s." % self.service_desc
 
         if runtime > 0:
-            plural=''
-            est = time.localtime(runtime)
-            if est.tm_min > 0:
-                if est.tm_min > 1:
-                    plural = 's'
-                if est.tm_sec > 0:
-                    self.print_msg('%s: Estimated time %d minute%s %d seconds' % (start_message, est.tm_min, plural, est.tm_sec))
-                else:
-                    self.print_msg('%s: Estimated time %d minute%s' % (start_message, est.tm_min, plural))
-            else:
-                if est.tm_sec > 1:
-                    plural = 's'
-                self.print_msg('%s: Estimated time %d second%s' % (start_message, est.tm_sec, plural))
+            self.print_msg('%s: Estimated time %s' % (start_message,
+                                                      format_seconds(runtime)))
         else:
             self.print_msg(start_message)
 
diff --git a/ipatests/test_ipaserver/test_install/test_service.py b/ipatests/test_ipaserver/test_install/test_service.py
new file mode 100644
index 0000000000000000000000000000000000000000..956ae62564dfb9453a720c174a955fad53bb1103
--- /dev/null
+++ b/ipatests/test_ipaserver/test_install/test_service.py
@@ -0,0 +1,36 @@
+# Authors:
+#   Petr Viktorin <pvikt...@redhat.com>
+#
+# Copyright (C) 2014  Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Tests for the `ipaserver.service` module.
+"""
+
+from ipaserver.install import service
+
+
+def test_format_seconds():
+    assert service.format_seconds(0) == '0 seconds'
+    assert service.format_seconds(1) == '1 second'
+    assert service.format_seconds(2) == '2 seconds'
+    assert service.format_seconds(11) == '11 seconds'
+    assert service.format_seconds(60) == '1 minute'
+    assert service.format_seconds(61) == '1 minute 1 second'
+    assert service.format_seconds(62) == '1 minute 2 seconds'
+    assert service.format_seconds(120) == '2 minutes'
+    assert service.format_seconds(125) == '2 minutes 5 seconds'
-- 
1.8.5.3

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to