1# Copyright 2013 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5# This file is expected to be used under another directory to use, 6# so we disable checking import path of GAE tools from this directory. 7# pylint: disable=F0401,E0611 8 9import json 10import unittest 11 12from google.appengine.api import files 13from google.appengine.ext import ndb 14from google.appengine.ext import testbed 15from google.appengine.ext.blobstore import BlobInfo 16 17import services 18 19 20class ServicesTest(unittest.TestCase): 21 @staticmethod 22 def CreateBlob(path): 23 # Initialize blob dictionary to return. 24 blob = {} 25 26 # Read sample file. 27 blob['json_str'] = open(path, 'r').read() 28 29 # Create file in blobstore according to sample file. 30 file_name = files.blobstore.create(mime_type='text/plain') 31 with files.open(file_name, 'a') as f: 32 f.write(blob['json_str']) 33 files.finalize(file_name) 34 35 # Get BlobInfo of sample file. 36 blob['blob_info'] = BlobInfo.get(files.blobstore.get_blob_key(file_name)) 37 38 return blob 39 40 def setUp(self): 41 self.testbed = testbed.Testbed() 42 self.testbed.activate() 43 self.testbed.init_all_stubs() 44 45 # Read sample file. 46 self.correct_blob = ServicesTest.CreateBlob('testdata/sample.json') 47 self.error_blob = ServicesTest.CreateBlob('testdata/error_sample.json') 48 49 def tearDown(self): 50 self.testbed.deactivate() 51 52 def testProfiler(self): 53 correct_blob = self.correct_blob 54 # Call services function to create Profiler entity. 55 run_id = services.CreateProfiler(correct_blob['blob_info']) 56 57 # Test GetProfiler 58 self.assertEqual(services.GetProfiler(run_id), correct_blob['json_str']) 59 60 # Create Profiler entity with the same file again and check uniqueness. 61 services.CreateProfiler(correct_blob['blob_info']) 62 self.assertEqual(services.Profiler.query().count(), 1) 63 64 def testTemplate(self): 65 correct_blob = self.correct_blob 66 # Call services function to create template entities. 67 services.CreateTemplates(correct_blob['blob_info']) 68 69 # Test templates being stored in database correctly. 70 json_obj = json.loads(correct_blob['json_str']) 71 for content in json_obj['templates'].values(): 72 template_entity = ndb.Key('Template', json.dumps(content)).get() 73 self.assertEqual(template_entity.content, content) 74 75 # Create template entities with the same file again and check uniqueness. 76 services.CreateTemplates(correct_blob['blob_info']) 77 self.assertEqual(services.Template.query().count(), 2) 78 79 def testErrorBlob(self): 80 error_blob = self.error_blob 81 # Test None when default template not indicated or found in templates. 82 dflt_tmpl = services.CreateTemplates(error_blob['blob_info']) 83 self.assertIsNone(dflt_tmpl) 84