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_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_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_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_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_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_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_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_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 __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 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_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_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_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_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 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()))
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 test_init(self): data1 = AppDashboardData() self.assertNotEquals(None, data1.helper) data2 = AppDashboardData(flexmock()) self.assertNotEquals(None, data2.helper)
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_get_head_node_ip(self): data1 = AppDashboardData() fake_ip = '1.1.1.1' self.assertEquals(data1.get_head_node_ip(), fake_ip)
def test_update_head_node_ip(self): fake_ip = '1.1.1.1' self.assertEquals(fake_ip, AppDashboardData().update_head_node_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_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)))