def test_get_application_info(self): self.setupAppStatusMocks() data1 = AppDashboardData() output = data1.get_application_info() self.assertEquals(len(output), 2) self.assertEquals(output['app1'], 'http://1.1.1.1:8080') self.assertEquals(output['app2'], None)
def test_update_status_info(self): self.setupServerStatusMocks() self.setupFakePutsAndDeletes() fake_get_appcontroller_client = flexmock() fake_get_appcontroller_client.should_receive('get_stats') \ .and_return([ {'ip' : '1.1.1.1', 'cpu' : '50', 'memory' : '50', 'disk' : '50', 'roles' : 'roles1'}, {'ip' : '2.2.2.2', 'cpu' : '50', 'memory' : '50', 'disk' : '50', 'roles' : 'roles1'} ]) flexmock(AppDashboardHelper).should_receive('get_appcontroller_client') \ .and_return(fake_get_appcontroller_client).once() data1 = AppDashboardData() data1.update_status_info() output = data1.get_status_info() self.assertEquals(len(output), 2) self.assertEquals(output[0]['ip'], '1.1.1.1') self.assertEquals(output[1]['ip'], '2.2.2.2')
def test_update_users(self): flexmock(AppDashboardHelper).should_receive('list_all_users')\ .and_return(['*****@*****.**', '*****@*****.**', '*****@*****.**']).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app1', 'app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app2']).once() self.setupUserInfoMocks() data1 = AppDashboardData() output = data1.update_users() self.assertEquals(len(output), 3) self.assertTrue(output[0].is_user_cloud_admin) self.assertFalse(output[1].is_user_cloud_admin) self.assertFalse(output[2].is_user_cloud_admin) self.assertTrue(output[0].can_upload_apps) self.assertTrue(output[1].can_upload_apps) self.assertFalse(output[2].can_upload_apps)
def test_get_status_info(self): self.setupServerStatusMocks() data1 = AppDashboardData() output = data1.get_status_info() self.assertEquals(len(output), 2) self.assertEquals(output[0]['ip'], '1.1.1.1') self.assertEquals(output[1]['ip'], '2.2.2.2')
def test_get_owned_apps(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. output = data1.get_owned_apps() self.assertEqual(len(output), 0) # First user: [email protected], apps=app1,app2 output = data1.get_owned_apps() self.assertTrue('app1' in output) self.assertTrue('app2' in output) # Second user: [email protected], apps=app2 output = data1.get_owned_apps() self.assertTrue('app2' in output) # Third user: [email protected], admin=app2. output = data1.get_owned_apps() self.assertTrue('app2' in output)
def test_get_api_status(self): self.setupApiStatusMocks() data1 = AppDashboardData() output = data1.get_api_status() self.assertEquals(len(output), 3) self.assertEquals(output['api1'], 'running') self.assertEquals(output['api2'], 'failed') self.assertEquals(output['api3'], 'unknown')
def test_get_monitoring_url(self): fake_ip = '1.1.1.1.' flexmock(AppDashboardData).should_receive('get_head_node_ip')\ .and_return(fake_ip).once() data1 = AppDashboardData() url = data1.get_monitoring_url() self.assertEquals(url, "http://{0}:{1}".format(fake_ip, AppDashboardData.MONITOR_PORT))
def test_update_users(self): flexmock(ndb).should_receive('put_multi').and_return() flexmock(AppDashboardHelper).should_receive('list_all_users')\ .and_return(['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin') \ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps') \ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app1', 'app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps') \ .with_args('*****@*****.**').and_return([]).once() self.setupUserInfoMocks() data1 = AppDashboardData() output = data1.update_users() self.assertEquals(len(output), 4) self.assertTrue(output[0].is_user_cloud_admin) self.assertFalse(output[1].is_user_cloud_admin) self.assertFalse(output[2].is_user_cloud_admin) self.assertFalse(output[3].is_user_cloud_admin) self.assertTrue(output[0].can_upload_apps) self.assertTrue(output[1].can_upload_apps) self.assertFalse(output[2].can_upload_apps) self.assertFalse(output[3].can_upload_apps) self.assertEqual( self.flatten_dash_layout(output[0].dash_layout_settings), self.user_info1_cloud_admin_dict) self.assertEqual( self.flatten_dash_layout(output[1].dash_layout_settings), self.user_info2_can_upload_apps_dict) self.assertEqual( self.flatten_dash_layout(output[2].dash_layout_settings), self.user_info3_cannot_upload_apps_dict) self.assertEqual( self.flatten_dash_layout(output[3].dash_layout_settings), self.user_info4_cannot_upload_and_owns_no_apps_dict)
def test_delete_app_from_datastore(self): flexmock(logging).should_receive('info').and_return() self.setupUserInfoMocks() self.setupAppStatusMocks() data1 = AppDashboardData() output = data1.delete_app_from_datastore('app2', email='*****@*****.**') app_list = output.owned_apps self.assertEquals(output.email, '*****@*****.**') self.assertFalse('app2' in app_list) self.assertTrue('app1' in app_list)
def test_update_users(self): flexmock(ndb).should_receive('put_multi').and_return() flexmock(AppDashboardHelper).should_receive('list_all_users')\ .and_return(['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin') \ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(True).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps')\ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('can_upload_apps') \ .with_args('*****@*****.**').and_return(False).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app1', 'app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps')\ .with_args('*****@*****.**').and_return(['app2']).once() flexmock(AppDashboardHelper).should_receive('get_owned_apps') \ .with_args('*****@*****.**').and_return([]).once() self.setupUserInfoMocks() data1 = AppDashboardData() output = data1.update_users() self.assertEquals(len(output), 4) self.assertTrue(output[0].is_user_cloud_admin) self.assertFalse(output[1].is_user_cloud_admin) self.assertFalse(output[2].is_user_cloud_admin) self.assertFalse(output[3].is_user_cloud_admin) self.assertTrue(output[0].can_upload_apps) self.assertTrue(output[1].can_upload_apps) self.assertFalse(output[2].can_upload_apps) self.assertFalse(output[3].can_upload_apps) self.assertEqual(self.flatten_dash_layout(output[0].dash_layout_settings), self.user_info1_cloud_admin_dict) self.assertEqual(self.flatten_dash_layout(output[1].dash_layout_settings), self.user_info2_can_upload_apps_dict) self.assertEqual(self.flatten_dash_layout(output[2].dash_layout_settings), self.user_info3_cannot_upload_apps_dict) self.assertEqual(self.flatten_dash_layout(output[3].dash_layout_settings), self.user_info4_cannot_upload_and_owns_no_apps_dict)
def __init__(self, request, response): """ Constructor. Args: request: The webapp2.Request object that contains information about the current web request. response: The webapp2.Response object that contains the response to be sent back to the browser. """ self.initialize(request, response) self.helper = AppDashboardHelper() self.dstore = AppDashboardData(self.helper)
def get(self): """ Retrieves the cached information about applications running in this AppScale deployment as a JSON-encoded dict. """ is_cloud_admin = AppDashboardHelper().is_user_cloud_admin() apps_user_is_admin_on = AppDashboardData().get_application_info() if not is_cloud_admin: apps_user_owns = AppDashboardHelper().get_owned_apps() new_app_dict = {} for app_name in apps_user_owns: if app_name in apps_user_is_admin_on: new_app_dict[app_name] = apps_user_is_admin_on.get(app_name) apps_user_is_admin_on = new_app_dict self.response.out.write(json.dumps(apps_user_is_admin_on))
def test_update_application_info_no_apps(self): flexmock(AppDashboardHelper).should_receive('get_status_info')\ .and_return([{ 'apps' : { 'none' : False } }]).once() flexmock(AppDashboardHelper).should_receive('get_login_host')\ .and_return('1.1.1.1').never() flexmock(AppDashboardHelper).should_receive('get_app_port')\ .and_return('8080').never() self.setupAppStatusMocks() self.setupFakePutsAndDeletes() data1 = AppDashboardData() output = data1.update_application_info() self.assertEquals(len(output), 0)
def test_update_application_info_no_apps(self): flexmock(AppDashboardHelper).should_receive('get_status_info')\ .and_return([{ 'apps' : { 'none' : False } }]).once() flexmock(AppDashboardHelper).should_receive('get_login_host')\ .and_return('1.1.1.1').never() flexmock(AppDashboardHelper).should_receive('get_app_ports')\ .and_return(['8080', '1444']).never() self.setupAppStatusMocks() self.setupFakePutsAndDeletes() data1 = AppDashboardData() output = data1.update_application_info() self.assertEquals(len(output), 0)
def test_update_application_info_two_apps(self): flexmock(AppDashboardHelper).should_receive('get_status_info')\ .and_return([{ 'apps' : { 'app1' : True, 'app2' : False } }]).once() flexmock(AppDashboardHelper).should_receive('get_login_host')\ .and_return('1.1.1.1').once() flexmock(AppDashboardHelper).should_receive('get_app_port')\ .and_return('8080').once() self.setupAppStatusMocks() self.setupFakePutsAndDeletes() data1 = AppDashboardData() output = data1.update_application_info() self.assertEquals(len(output), 2) self.assertEquals(output['app1'], 'http://1.1.1.1:8080') self.assertEquals(output['app2'], None)
def test_get_owned_apps(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. output = data1.get_owned_apps() self.assertEqual(len(output), 0) # First user: [email protected], apps=app1,app2 output = data1.get_owned_apps() self.assertTrue('app1' in output) self.assertTrue('app2' in output) # Second user: [email protected], apps=app2 output = data1.get_owned_apps() self.assertTrue('app2' in output) # Third user: [email protected], admin=app2. output = data1.get_owned_apps() self.assertTrue('app2' in output) # Fourth user: [email protected], admin=None. output = data1.get_owned_apps() self.assertTrue(not output)
def test_get_dash_layout_settings(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. self.assertEqual(data1.get_dash_layout_settings(), {}) # First user: [email protected], upload=True, cloud_admin=True self.assertEqual( self.flatten_dash_layout(data1.get_dash_layout_settings()), self.user_info1_cloud_admin_dict) # Second user: [email protected], upload=True, cloud_admin=False self.assertEqual( self.flatten_dash_layout(data1.get_dash_layout_settings()), self.user_info2_can_upload_apps_dict) # Third user: [email protected], upload=False, cloud_admin=False self.assertEqual( self.flatten_dash_layout(data1.get_dash_layout_settings()), self.user_info3_cannot_upload_apps_dict) # Fourth user: [email protected], upload=False, cloud_admin=False self.assertEqual( self.flatten_dash_layout(data1.get_dash_layout_settings()), self.user_info4_cannot_upload_and_owns_no_apps_dict)
def test_update_application_info_two_apps(self): flexmock(AppDashboardHelper).should_receive('get_status_info')\ .and_return([{ 'apps' : { 'app1' : True, 'app2' : False } }]).once() flexmock(AppDashboardHelper).should_receive('get_login_host')\ .and_return('1.1.1.1').once() flexmock(AppDashboardHelper).should_receive('get_app_ports')\ .and_return(['8080', '1444']).once() self.setupAppStatusMocks() self.setupFakePutsAndDeletes() data1 = AppDashboardData() output = data1.update_application_info() self.assertEquals(len(output), 2) self.assertEquals(output['app1'], ['http://1.1.1.1:8080', 'https://1.1.1.1:1444']) self.assertEquals(output['app2'], None)
def test_update_api_status(self): self.setupApiStatusMocks() self.setupFakePutsAndDeletes() fake_get_appcontroller_client = flexmock() fake_get_appcontroller_client.should_receive('get_api_status')\ .and_return({ 'api1' : 'running', 'api2' : 'failed', 'api3' : 'unknown', }) flexmock(AppDashboardHelper).should_receive('get_appcontroller_client')\ .and_return(fake_get_appcontroller_client).once() data1 = AppDashboardData() data1.update_api_status() output = data1.get_api_status() self.assertEquals(len(output), 3) self.assertEquals(output['api1'], 'running') self.assertEquals(output['api2'], 'failed') self.assertEquals(output['api3'], 'unknown')
def test_can_upload_apps(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. self.assertFalse(data1.can_upload_apps()) # First user: [email protected], upload=True. self.assertTrue(data1.can_upload_apps()) # Second user: [email protected], upload=True. self.assertTrue(data1.can_upload_apps()) # Third user: [email protected], upload=False. self.assertFalse(data1.can_upload_apps())
def test_is_user_cloud_admin(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. self.assertFalse(data1.is_user_cloud_admin()) # First user: [email protected], admin=True. self.assertTrue(data1.is_user_cloud_admin()) # Second user: [email protected], admin=False. self.assertFalse(data1.is_user_cloud_admin()) # Third user: [email protected], admin=False. self.assertFalse(data1.is_user_cloud_admin())
def test_get_dash_layout_settings(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. self.assertEqual(data1.get_dash_layout_settings(), {}) # First user: [email protected], upload=True, cloud_admin=True self.assertEqual(self.flatten_dash_layout( data1.get_dash_layout_settings()), self.user_info1_cloud_admin_dict) # Second user: [email protected], upload=True, cloud_admin=False self.assertEqual(self.flatten_dash_layout( data1.get_dash_layout_settings()), self.user_info2_can_upload_apps_dict) # Third user: [email protected], upload=False, cloud_admin=False self.assertEqual(self.flatten_dash_layout( data1.get_dash_layout_settings()), self.user_info3_cannot_upload_apps_dict) # Fourth user: [email protected], upload=False, cloud_admin=False self.assertEqual(self.flatten_dash_layout( data1.get_dash_layout_settings()), self.user_info4_cannot_upload_and_owns_no_apps_dict)
def test_rebuild_dash_layout_settings_dict_default(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") # First call, not logged in. self.assertEqual({}, data1.rebuild_dash_layout_settings_dict(email=None)) # First user: [email protected], upload=True, cloud_admin=True self.assertEqual( self.user_info1_cloud_admin_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user1.email))) # Second user: [email protected], upload=True, cloud_admin=False self.assertEqual( self.user_info2_can_upload_apps_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user2.email))) # Third user: [email protected], upload=False, cloud_admin=False self.assertEqual( self.user_info3_cannot_upload_apps_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user3.email))) # Fourth user: [email protected], upload=False, cloud_admin=False self.assertEqual( self.user_info4_cannot_upload_and_owns_no_apps_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user4.email)))
def test_rebuild_dash_layout_settings_dict_default(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") # First call, not logged in. self.assertEqual({}, data1.rebuild_dash_layout_settings_dict(email=None)) # First user: [email protected], upload=True, cloud_admin=True self.assertEqual(self.user_info1_cloud_admin_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict( email=user1.email))) # Second user: [email protected], upload=True, cloud_admin=False self.assertEqual(self.user_info2_can_upload_apps_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict( email=user2.email))) # Third user: [email protected], upload=False, cloud_admin=False self.assertEqual(self.user_info3_cannot_upload_apps_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict( email=user3.email))) # Fourth user: [email protected], upload=False, cloud_admin=False self.assertEqual(self.user_info4_cannot_upload_and_owns_no_apps_dict, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict( email=user4.email)))
def test_is_user_cloud_admin(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. self.assertFalse(data1.is_user_cloud_admin()) # First user: [email protected], admin=True. self.assertTrue(data1.is_user_cloud_admin()) # Second user: [email protected], admin=False. self.assertFalse(data1.is_user_cloud_admin()) # Third user: [email protected], admin=False. self.assertFalse(data1.is_user_cloud_admin()) # Fourth user: [email protected], admin=False. self.assertFalse(data1.is_user_cloud_admin())
def test_can_upload_apps(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() # First call, not logged in. self.assertFalse(data1.can_upload_apps()) # First user: [email protected], upload=True. self.assertTrue(data1.can_upload_apps()) # Second user: [email protected], upload=True. self.assertTrue(data1.can_upload_apps()) # Third user: [email protected], upload=False. self.assertFalse(data1.can_upload_apps()) # Fourth user: [email protected], upload=False. self.assertFalse(data1.can_upload_apps())
def test_rebuild_dash_layout_settings_dict_custom(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } # First user: [email protected], upload=True, cloud_admin=True user1_should_return = { "nav":["debugging_monitoring", "appscale_management", "app_management"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user1)), user1_should_return) self.assertEqual(user1_should_return, self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict( email=user1.email))) # Second user: [email protected], upload=True, cloud_admin=False user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } user2_should_return = { "nav":["debugging_monitoring", "app_management"], "panel":["upload_app","app_console"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user2)), user2_should_return) self.assertEqual(user2_should_return, self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict( email=user2.email))) # Third user: [email protected], upload=False, cloud_admin=False user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } user3_should_return = { "nav":["debugging_monitoring"], "panel":["upload_app","app_console"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user3)), user3_should_return) self.assertEqual(user3_should_return, self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict( email=user3.email))) # Fourth user: [email protected], upload=False, cloud_admin=False user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } user4_should_return = { "nav":[], "panel":["upload_app","app_console"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user4)), user4_should_return) self.assertEqual(user4_should_return, self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict( email=user4.email)))
def test_update_head_node_ip(self): fake_ip = '1.1.1.1' self.assertEquals(fake_ip, AppDashboardData().update_head_node_ip())
class AppDashboard(webapp2.RequestHandler): """ Class that all pages in the Dashboard must inherit from. """ # Regular expression to capture the continue url. CONTINUE_URL_REGEX = 'continue=(.*)$' # Regular expression for updating user permissions. USER_PERMISSION_REGEX = '^user_permission_' # Regular expression that matches email addresses. USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$' # The frequency, in seconds, that defines how often Task Queue tasks are fired # to update the Dashboard's Datastore cache. REFRESH_WAIT_TIME = 10 def __init__(self, request, response): """ Constructor. Args: request: The webapp2.Request object that contains information about the current web request. response: The webapp2.Response object that contains the response to be sent back to the browser. """ self.initialize(request, response) self.helper = AppDashboardHelper() self.dstore = AppDashboardData(self.helper) def render_template(self, template_file, values=None): """ Renders a template file with all variables loaded. Args: template_file: A str with the relative path to template file. values: A dict with key/value pairs used as variables in the jinja template files. Returns: A str with the rendered template. """ if values is None: values = {} owned_apps = self.dstore.get_owned_apps() self.helper.update_cookie_app_list(owned_apps, self.request, self.response) template = jinja_environment.get_template(template_file) sub_vars = { 'logged_in': self.helper.is_user_logged_in(), 'user_email': self.helper.get_user_email(), 'is_user_cloud_admin': self.dstore.is_user_cloud_admin(), 'can_upload_apps': self.dstore.can_upload_apps(), 'apps_user_is_admin_on': owned_apps, 'flower_url': self.dstore.get_flower_url(), 'monit_url': self.dstore.get_monit_url() } for key in values.keys(): sub_vars[key] = values[key] return template.render(sub_vars) def get_shared_navigation(self): """ Renders the shared navigation. Returns: A str with the navigation bar rendered. """ show_create_account = True if AppDashboardHelper.USE_SHIBBOLETH: show_create_account = False return self.render_template( template_file='shared/navigation.html', values={'show_create_account': show_create_account}) def render_page(self, page, template_file, values=None): """ Renders a template with the main layout and nav bar. """ if values is None: values = {} self.response.headers['Content-Type'] = 'text/html' template = jinja_environment.get_template('layouts/main.html') self.response.out.write( template.render(page_name=page, page_body=self.render_template( template_file, values), shared_navigation=self.get_shared_navigation()))
def test_get_database_info(self): data1 = AppDashboardData() output = data1.get_database_info() self.assertEquals(output['table'], 'table') self.assertEquals(output['replication'], 3)
def test_rebuild_dash_layout_settings_dict_custom(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**") user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } # First user: [email protected], upload=True, cloud_admin=True user1_should_return = { "nav": ["debugging_monitoring", "appscale_management", "app_management"], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user1)), user1_should_return) self.assertEqual( user1_should_return, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user1.email))) # Second user: [email protected], upload=True, cloud_admin=False user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } user2_should_return = { "nav": ["debugging_monitoring", "app_management"], "panel": ["upload_app", "app_console"] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user2)), user2_should_return) self.assertEqual( user2_should_return, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user2.email))) # Third user: [email protected], upload=False, cloud_admin=False user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } user3_should_return = { "nav": ["debugging_monitoring"], "panel": ["upload_app", "app_console"] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user3)), user3_should_return) self.assertEqual( user3_should_return, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user3.email))) # Fourth user: [email protected], upload=False, cloud_admin=False user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } user4_should_return = { "nav": [], "panel": ["upload_app", "app_console"] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting, user_info=user4)), user4_should_return) self.assertEqual( user4_should_return, self.flatten_dash_layout( data1.rebuild_dash_layout_settings_dict(email=user4.email)))
def test_init(self): data1 = AppDashboardData() self.assertNotEquals(None, data1.helper) data2 = AppDashboardData(flexmock()) self.assertNotEquals(None, data2.helper)
def test_get_head_node_ip(self): data1 = AppDashboardData() fake_ip = '1.1.1.1' self.assertEquals(data1.get_head_node_ip(), fake_ip)
def test_set_dash_layout_settings_with_argument(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() #Sending new dictionaries user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } self.assertEqual(data1.set_dash_layout_settings(values=user_setting), None) user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } # First user: [email protected], upload=True, cloud_admin=True user1_should_return = { "nav":["debugging_monitoring", "appscale_management", "app_management"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user1_should_return) # Second user: [email protected], upload=True, cloud_admin=False user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } user2_should_return = { "nav":["debugging_monitoring", "app_management"], "panel":["upload_app","app_console"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user2_should_return) # Third user: [email protected], upload=False, cloud_admin=False user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } user3_should_return = { "nav":["debugging_monitoring"], "panel":["upload_app","app_console"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user3_should_return) # Fourth user: [email protected], upload=False, cloud_admin=False user_setting = { "nav":["debugging_monitoring", "appscale_management", "app_management", "invalid_key"], "panel":["cloud_stats","database_stats","upload_app","app_console", "memcache_stats"] } user4_should_return = { "nav":[], "panel":["upload_app","app_console"] } self.assertEqual(self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user4_should_return)
def test_update_database_info(self): fake_get_appcontroller_client = flexmock() data = AppDashboardData() output = data.update_database_info() self.assertEquals(output['table'], 'table') self.assertEquals(output['replication'], 3)
def get(self): """ Retrieves the cached information about machine-level statistics as a JSON-encoded dict. """ self.response.out.write( json.dumps(AppDashboardData().get_status_info()))
def test_set_dash_layout_settings_with_argument(self): # slip in some fake users self.setupUserInfoMocks() # mock out the App Engine Users API self.setupUsersAPIMocks() data1 = AppDashboardData() #Sending new dictionaries user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } self.assertEqual(data1.set_dash_layout_settings(values=user_setting), None) user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } # First user: [email protected], upload=True, cloud_admin=True user1_should_return = { "nav": ["debugging_monitoring", "appscale_management", "app_management"], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user1_should_return) # Second user: [email protected], upload=True, cloud_admin=False user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } user2_should_return = { "nav": ["debugging_monitoring", "app_management"], "panel": ["upload_app", "app_console"] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user2_should_return) # Third user: [email protected], upload=False, cloud_admin=False user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } user3_should_return = { "nav": ["debugging_monitoring"], "panel": ["upload_app", "app_console"] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user3_should_return) # Fourth user: [email protected], upload=False, cloud_admin=False user_setting = { "nav": [ "debugging_monitoring", "appscale_management", "app_management", "invalid_key" ], "panel": [ "cloud_stats", "database_stats", "upload_app", "app_console", "memcache_stats" ] } user4_should_return = { "nav": [], "panel": ["upload_app", "app_console"] } self.assertEqual( self.flatten_dash_layout( data1.set_dash_layout_settings(values=user_setting)), user4_should_return)
def get(self): """ Retrieves the cached information about applications running in this AppScale deployment as a JSON-encoded dict. """ self.response.out.write( json.dumps(AppDashboardData().get_application_info()))
class AppDashboard(webapp2.RequestHandler): """ Class that all pages in the Dashboard must inherit from. """ # Regular expression to capture the continue url. CONTINUE_URL_REGEX = 'continue=(.*)$' # Regular expression for updating user permissions. USER_PERMISSION_REGEX = '^user_permission_' # Regular expression that matches email addresses. USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$' # The frequency, in seconds, that defines how often Task Queue tasks are fired # to update the Dashboard's Datastore cache. REFRESH_WAIT_TIME = 10 def __init__(self, request, response): """ Constructor. Args: request: The webapp2.Request object that contains information about the current web request. response: The webapp2.Response object that contains the response to be sent back to the browser. """ self.initialize(request, response) self.helper = AppDashboardHelper() self.dstore = AppDashboardData(self.helper) def render_template(self, template_file, values=None): """ Renders a template file with all variables loaded. Args: template_file: A str with the relative path to template file. values: A dict with key/value pairs used as variables in the jinja template files. Returns: A str with the rendered template. """ if values is None: values = {} owned_apps = self.dstore.get_owned_apps() self.helper.update_cookie_app_list(owned_apps, self.request, self.response) template = jinja_environment.get_template(template_file) sub_vars = { 'logged_in' : self.helper.is_user_logged_in(), 'user_email' : self.helper.get_user_email(), 'is_user_cloud_admin' : self.dstore.is_user_cloud_admin(), 'can_upload_apps' : self.dstore.can_upload_apps(), 'apps_user_is_admin_on' : owned_apps, 'flower_url' : self.dstore.get_flower_url(), } for key in values.keys(): sub_vars[key] = values[key] return template.render(sub_vars) def get_shared_navigation(self): """ Renders the shared navigation. Returns: A str with the navigation bar rendered. """ return self.render_template(template_file='shared/navigation.html') def render_page(self, page, template_file, values=None ): """ Renders a template with the main layout and nav bar. """ if values is None: values = {} self.response.headers['Content-Type'] = 'text/html' template = jinja_environment.get_template('layouts/main.html') self.response.out.write(template.render( page_name=page, page_body=self.render_template(template_file, values), shared_navigation=self.get_shared_navigation() ))
class AppDashboard(webapp2.RequestHandler): """ Class that all pages in the Dashboard must inherit from. """ # Regular expression to capture the continue url. CONTINUE_URL_REGEX = 'continue=(.*)$' # The dashboard's project ID. PROJECT_ID = 'appscaledashboard' # Regular expression for updating user permissions. USER_PERMISSION_REGEX = '^user_permission_' # Regular expression that matches email addresses. USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$' # The frequency, in seconds, that defines how often Task Queue tasks are fired # to update the Dashboard's Datastore cache. REFRESH_WAIT_TIME = 10 def __init__(self, request, response): """ Constructor. Args: request: The webapp2.Request object that contains information about the current web request. response: The webapp2.Response object that contains the response to be sent back to the browser. """ self.initialize(request, response) self.helper = AppDashboardHelper() self.dstore = AppDashboardData(self.helper) def render_template(self, template_file, values=None): """ Renders a template file with all variables loaded. Args: template_file: A str with the relative path to template file. values: A dict with key/value pairs used as variables in the jinja template files. Returns: A str with the rendered template. """ if values is None: values = {} is_cloud_admin = self.helper.is_user_cloud_admin() all_versions = self.helper.get_version_info() if is_cloud_admin: apps_user_owns = list({version.split('_')[0] for version in all_versions}) else: apps_user_owns = self.helper.get_owned_apps() versions_user_is_admin_on = { version: all_versions[version] for version in all_versions if version.split('_')[0] in apps_user_owns} self.helper.update_cookie_app_list(apps_user_owns, self.request, self.response) template = jinja_environment.get_template(template_file) sub_vars = { 'logged_in': self.helper.is_user_logged_in(), 'user_email': self.helper.get_user_email(), 'is_user_cloud_admin': self.dstore.is_user_cloud_admin(), 'can_upload_apps': self.dstore.can_upload_apps(), 'versions_user_is_admin_on': versions_user_is_admin_on, 'user_layout_pref': self.dstore.get_dash_layout_settings(), 'flower_url': self.dstore.get_flower_url(), 'monit_url': self.dstore.get_monit_url() } for key in values.keys(): sub_vars[key] = values[key] return template.render(sub_vars) def get_shared_navigation(self, page): """ Renders the shared navigation. Args: page: A string specifying the page ID. Returns: A str with the navigation bar rendered. """ show_create_account = True if AppDashboardHelper.USE_SHIBBOLETH: show_create_account = False # These sections do not lend themselves well to having panels. panel_blacklist = ['monit', 'taskqueue', 'datastore_viewer'] return self.render_template(template_file='shared/navigation.html', values={'show_create_account': show_create_account, 'page_name': page, 'panel_blacklist': panel_blacklist}) def render_page(self, page, template_file, values=None): """ Renders a template with the main layout and nav bar. Args: page: A string specifying the page ID. template_file: A string specifying the template to use. values: A dictionary containing template variables. """ if values is None: values = {} self.response.headers['Content-Type'] = 'text/html' template = jinja_environment.get_template('layouts/main.html') self.response.out.write(template.render( page_name=page, page_body=self.render_template(template_file, values), shared_navigation=self.get_shared_navigation(page) )) def render_app_page(self, page, values=None): """ Render a typical page using the app_page template. Args: page: A string specifying the page ID. values: A dictionary containing template variables. """ self.render_page(page=page, template_file="layouts/app_page.html", values=values)
class AppDashboard(webapp2.RequestHandler): """ Class that all pages in the Dashboard must inherit from. """ # Regular expression to capture the continue url. CONTINUE_URL_REGEX = 'continue=(.*)$' # The dashboard's project ID. PROJECT_ID = 'appscaledashboard' # Regular expression for updating user permissions. USER_PERMISSION_REGEX = '^user_permission_' # Regular expression that matches email addresses. USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$' # The frequency, in seconds, that defines how often Task Queue tasks are fired # to update the Dashboard's Datastore cache. REFRESH_WAIT_TIME = 10 def __init__(self, request, response): """ Constructor. Args: request: The webapp2.Request object that contains information about the current web request. response: The webapp2.Response object that contains the response to be sent back to the browser. """ self.initialize(request, response) self.helper = AppDashboardHelper() self.dstore = AppDashboardData(self.helper) def render_template(self, template_file, values=None): """ Renders a template file with all variables loaded. Args: template_file: A str with the relative path to template file. values: A dict with key/value pairs used as variables in the jinja template files. Returns: A str with the rendered template. """ if values is None: values = {} is_cloud_admin = self.helper.is_user_cloud_admin() all_versions = self.helper.get_version_info() if is_cloud_admin: apps_user_owns = list( {version.split('_')[0] for version in all_versions}) else: apps_user_owns = self.helper.get_owned_apps() versions_user_is_admin_on = { version: all_versions[version] for version in all_versions if version.split('_')[0] in apps_user_owns } self.helper.update_cookie_app_list(apps_user_owns, self.request, self.response) template = jinja_environment.get_template(template_file) sub_vars = { 'logged_in': self.helper.is_user_logged_in(), 'user_email': self.helper.get_user_email(), 'is_user_cloud_admin': self.dstore.is_user_cloud_admin(), 'can_upload_apps': self.dstore.can_upload_apps(), 'versions_user_is_admin_on': versions_user_is_admin_on, 'user_layout_pref': self.dstore.get_dash_layout_settings(), 'flower_url': self.dstore.get_flower_url(), 'monit_url': self.dstore.get_monit_url() } for key in values.keys(): sub_vars[key] = values[key] return template.render(sub_vars) def get_shared_navigation(self, page): """ Renders the shared navigation. Args: page: A string specifying the page ID. Returns: A str with the navigation bar rendered. """ show_create_account = True if AppDashboardHelper.USE_SHIBBOLETH: show_create_account = False # These sections do not lend themselves well to having panels. panel_blacklist = ['monit', 'taskqueue', 'datastore_viewer'] return self.render_template(template_file='shared/navigation.html', values={ 'show_create_account': show_create_account, 'page_name': page, 'panel_blacklist': panel_blacklist }) def render_page(self, page, template_file, values=None): """ Renders a template with the main layout and nav bar. Args: page: A string specifying the page ID. template_file: A string specifying the template to use. values: A dictionary containing template variables. """ if values is None: values = {} self.response.headers['Content-Type'] = 'text/html' template = jinja_environment.get_template('layouts/main.html') self.response.out.write( template.render( page_name=page, page_body=self.render_template(template_file, values), shared_navigation=self.get_shared_navigation(page))) def render_app_page(self, page, values=None): """ Render a typical page using the app_page template. Args: page: A string specifying the page ID. values: A dictionary containing template variables. """ self.render_page(page=page, template_file="layouts/app_page.html", values=values)