From 3b813dd2683a81cc668d120dd000f437e2124761 Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Mon, 17 Aug 2009 14:51:23 +0200
Subject: [PATCH] Add utils.FormatTime and a simple unittest

We don't format with subsecond-precision.

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
---
 lib/utils.py                  | 15 +++++++++++++++
 test/ganeti.utils_unittest.py | 18 +++++++++++++++++-
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/lib/utils.py b/lib/utils.py
index 0af26132a..5aaa0ca7f 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -1934,6 +1934,21 @@ def LockFile(fd):
     raise
 
 
+def FormatTime(val):
+  """Formats a time value.
+
+  @type val: float or None
+  @param val: the timestamp as returned by time.time()
+  @return: a string value or N/A if we don't have a valid timestamp
+
+  """
+  if val is None or not isinstance(val, (int, float)):
+    return "N/A"
+  # these two codes works on Linux, but they are not guaranteed on all
+  # platforms
+  return time.strftime("%F %T", time.localtime(val))
+
+
 class FileLock(object):
   """Utility class for file locks.
 
diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py
index 415ffa7d6..5abe8a2b6 100755
--- a/test/ganeti.utils_unittest.py
+++ b/test/ganeti.utils_unittest.py
@@ -45,7 +45,7 @@ from ganeti.utils import IsProcessAlive, RunCmd, \
      ParseUnit, AddAuthorizedKey, RemoveAuthorizedKey, \
      ShellQuote, ShellQuoteArgs, TcpPing, ListVisibleFiles, \
      SetEtcHostsEntry, RemoveEtcHostsEntry, FirstFree, OwnIpAddress, \
-     TailFile, ForceDictType, SafeEncode, IsNormAbsPath
+     TailFile, ForceDictType, SafeEncode, IsNormAbsPath, FormatTime
 
 from ganeti.errors import LockError, UnitParseError, GenericError, \
      ProgrammerError
@@ -987,5 +987,21 @@ class TestSafeEncode(unittest.TestCase):
       self.failUnlessEqual(txt, SafeEncode(txt))
 
 
+class TestFormatTime(unittest.TestCase):
+  """Testing case for FormatTime"""
+
+  def testNone(self):
+    self.failUnlessEqual(FormatTime(None), "N/A")
+
+  def testInvalid(self):
+    self.failUnlessEqual(FormatTime(()), "N/A")
+
+  def testNow(self):
+    # tests that we accept time.time input
+    FormatTime(time.time())
+    # tests that we accept int input
+    FormatTime(int(time.time()))
+
+
 if __name__ == '__main__':
   unittest.main()
-- 
GitLab