浏览代码

HUE-8737 [fb] Fix py3 unit test for file browser and help

Ying Chen 6 年之前
父节点
当前提交
d93f81ccac

+ 13 - 3
apps/filebrowser/src/filebrowser/lib/archives.py

@@ -22,6 +22,7 @@ from builtins import object
 import bz2
 import os
 import posixpath
+import sys
 import tarfile
 import tempfile
 
@@ -67,7 +68,10 @@ class ZipArchive(Archive):
   """
 
   def __init__(self, file):
-    self.file = isinstance(file, basestring) and open(file) or file
+    if sys.version_info[0] > 2:
+      self.file = isinstance(file, basestring) and file
+    else:
+      self.file = isinstance(file, basestring) and open(file) or file
     self.zfh = ZipFile(self.file)
 
   def extract(self):
@@ -115,7 +119,10 @@ class ZipArchive(Archive):
     for f in files:
       new_path = os.path.join(basepath, f)
       new_file = open(new_path, 'w')
-      new_file.write(self.zfh.read(f))
+      zdata = self.zfh.read(f)
+      if not isinstance(zdata, str):
+        zdata = zdata.decode('utf-8')
+      new_file.write(zdata)
       new_file.close()
 
 
@@ -176,7 +183,10 @@ class TarballArchive(Archive):
     for f in files:
       new_path = os.path.join(basepath, f)
       new_file = open(new_path, 'w')
-      new_file.write(self.fh.extractfile(f).read())
+      extracted_data = self.fh.extractfile(f).read()
+      if not isinstance(extracted_data, str):
+        extracted_data = extracted_data.decode('utf-8')
+      new_file.write(extracted_data)
       new_file.close()
 
 

+ 10 - 8
apps/filebrowser/src/filebrowser/views_test.py

@@ -63,8 +63,10 @@ from filebrowser.views import snappy_installed
 
 if sys.version_info[0] > 2:
   from urllib.parse import unquote as urllib_unquote
+  open_file = open
 else:
   from urllib import unquote as urllib_unquote
+  open_file = file
 
 
 LOG = logging.getLogger(__name__)
@@ -915,7 +917,7 @@ alert("XSS")
 
       # Just upload the current python file
       resp = self.c.post('/filebrowser/upload/file?dest=%s' % HDFS_DEST_DIR, # GET param avoids infinite looping
-                         dict(dest=HDFS_DEST_DIR, hdfs_file=file(LOCAL_FILE)))
+                         dict(dest=HDFS_DEST_DIR, hdfs_file=open_file(LOCAL_FILE)))
       response = json.loads(resp.content)
 
       assert_equal(0, response['status'], response)
@@ -925,12 +927,12 @@ alert("XSS")
 
       f = self.cluster.fs.open(HDFS_FILE)
       actual = f.read(file_size)
-      expected = file(LOCAL_FILE).read()
+      expected = open_file(LOCAL_FILE).read()
       assert_equal(actual, expected, 'files do not match: %s != %s' % (len(actual), len(expected)))
 
       # Upload again and so fails because file already exits
       resp = self.c.post('/filebrowser/upload/file?dest=%s' % HDFS_DEST_DIR,
-                         dict(dest=HDFS_DEST_DIR, hdfs_file=file(LOCAL_FILE)))
+                         dict(dest=HDFS_DEST_DIR, hdfs_file=open_file(LOCAL_FILE)))
       response = json.loads(resp.content)
       assert_equal(-1, response['status'], response)
       assert_true('already exists' in response['data'], response)
@@ -940,7 +942,7 @@ alert("XSS")
       grant_access("not_me", "not_me", "filebrowser")
       try:
         resp = not_me.post('/filebrowser/upload/file?dest=%s' % HDFS_DEST_DIR,
-                           dict(dest=HDFS_DEST_DIR, hdfs_file=file(LOCAL_FILE)))
+                           dict(dest=HDFS_DEST_DIR, hdfs_file=open_file(LOCAL_FILE)))
         response = json.loads(resp.content)
         assert_equal(-1, response['status'], response)
         assert_true('User not_me does not have permissions' in response['data'], response)
@@ -965,7 +967,7 @@ alert("XSS")
 
       # Upload archive
       resp = self.c.post('/filebrowser/upload/file?dest=%s' % HDFS_DEST_DIR,
-                         dict(dest=HDFS_DEST_DIR, hdfs_file=file(ZIP_FILE)))
+                         dict(dest=HDFS_DEST_DIR, hdfs_file=open_file(ZIP_FILE)))
       response = json.loads(resp.content)
       assert_equal(0, response['status'], response)
       assert_true(self.cluster.fs.exists(HDFS_ZIP_FILE))
@@ -988,7 +990,7 @@ alert("XSS")
       test_file = test_dir + '/test.txt'
       self.cluster.fs.mkdir(test_dir)
       self.cluster.fs.chown(test_dir, 'test')
-      self.cluster.fs.chmod(test_dir, 0700)
+      self.cluster.fs.chmod(test_dir, 0o700)
       for i in range(3):
         f = self.cluster.fs.open(test_file + "%s" %i, "w")
         f.close()
@@ -1042,7 +1044,7 @@ alert("XSS")
     try:
       # Upload archive
       resp = self.c.post('/filebrowser/upload/file?dest=%s' % HDFS_DEST_DIR,
-                         dict(dest=HDFS_DEST_DIR, hdfs_file=file(TGZ_FILE)))
+                         dict(dest=HDFS_DEST_DIR, hdfs_file=open_file(TGZ_FILE)))
       response = json.loads(resp.content)
       assert_equal(0, response['status'], response)
       assert_true(self.cluster.fs.exists(HDFS_TGZ_FILE))
@@ -1070,7 +1072,7 @@ alert("XSS")
     try:
       # Upload archive
       resp = self.c.post('/filebrowser/upload/file?dest=%s' % HDFS_DEST_DIR,
-                         dict(dest=HDFS_DEST_DIR, hdfs_file=file(BZ2_FILE)))
+                         dict(dest=HDFS_DEST_DIR, hdfs_file=open_file(BZ2_FILE)))
       response = json.loads(resp.content)
       assert_equal(0, response['status'], response)
       assert_true(self.cluster.fs.exists(HDFS_BZ2_FILE))

+ 2 - 2
apps/help/src/help/tests.py

@@ -26,7 +26,7 @@ def test_about():
 
   # Test default output
   response = c.get('/help/')
-  assert_true("Introducing Hue" in response.content)
+  assert_true(b'Introducing Hue' in response.content)
 
   # Test default to index.md
   response = c.get("/help/about/")
@@ -34,4 +34,4 @@ def test_about():
   assert_equal(response.content, response2.content)
 
   # Test index at the bottom
-  assert_true('href="/help/desktop' in response.content)
+  assert_true(b'href="/help/desktop' in response.content)

+ 8 - 1
apps/help/src/help/views.py

@@ -26,6 +26,12 @@ from hadoop.fs import LocalSubFileSystem
 import markdown
 import urllib.request, urllib.parse, urllib.error
 import os
+import sys
+
+if sys.version_info[0] > 2:
+  open_file = open
+else:
+  open_file = file
 
 INDEX_FILENAMES = ("index.md", "index.html", "index.txt")
 
@@ -68,7 +74,8 @@ def view(request, app, path):
     raise PopupException("Could not find or read the file: %s (app %s)" % (path, app))
 
   content = fs.open(path, 'r').read()
-  content = str(content, 'utf-8', errors='replace')
+  if isinstance(content, bytes):
+    content = str(content, 'utf-8', errors='replace')
   if path.lower().endswith(".md"):
     content = ('<div class="print rendered-markdown">' +
                markdown.markdown(content, ['extra']) +