def get(self, property_regex): """ 'get' provides a cleaner experience for users than the appscale-get-property command, by using the configuration options present in the AppScalefile found in the current working directory. Args: property_regex: A regular expression indicating which AppController properties should be retrieved. Raises: AppScalefileException: If there is no AppScalefile in the current working directory. """ contents = self.read_appscalefile() contents_as_yaml = yaml.safe_load(contents) # construct the appscale-get-property command command = [] if 'keyname' in contents_as_yaml: command.append("--keyname") command.append(contents_as_yaml["keyname"]) command.append("--property") command.append(property_regex) # and exec it options = ParseArgs(command, "appscale-get-property").args return AppScaleTools.get_property(options)
def test_get_property(self): # put in a mock for reading the secret file builtins = flexmock(sys.modules['__builtin__']) builtins.should_call('open') # set the fall-through secret_key_location = LocalState.get_secret_key_location(self.keyname) fake_secret = flexmock(name="fake_secret") fake_secret.should_receive('read').and_return('the secret') builtins.should_receive('open').with_args(secret_key_location, 'r') \ .and_return(fake_secret) # mock out finding the shadow node's IP address from the json file flexmock(os.path) os.path.should_call('exists') # set the fall-through os.path.should_receive('exists').with_args( LocalState.get_locations_json_location(self.keyname)).and_return(True) fake_nodes_json = flexmock(name="fake_secret") fake_nodes_json.should_receive('read').and_return(json.dumps( {"node_info": [{ 'public_ip': 'public1', 'private_ip': 'private1', 'roles': ['shadow'] }]})) builtins.should_receive('open').with_args( LocalState.get_locations_json_location(self.keyname), 'r') \ .and_return(fake_nodes_json) # mock out grabbing the userappserver ip from an appcontroller property_regex = "property-name-.*" expected = {'a':'b'} fake_appcontroller = flexmock(name='fake_appcontroller') fake_appcontroller.should_receive('get_property').with_args(property_regex, 'the secret').and_return(json.dumps(expected)) flexmock(SOAPpy) SOAPpy.should_receive('SOAPProxy').with_args('https://public1:17443') \ .and_return(fake_appcontroller) argv = [ "--keyname", self.keyname, "--property", property_regex ] options = ParseArgs(argv, self.function).args properties = AppScaleTools.get_property(options) self.assertEqual(expected, properties)
def test_get_property(self): # put in a mock for reading the secret file builtins = flexmock(sys.modules['__builtin__']) builtins.should_call('open') # set the fall-through secret_key_location = LocalState.get_secret_key_location(self.keyname) fake_secret = flexmock(name="fake_secret") fake_secret.should_receive('read').and_return('the secret') builtins.should_receive('open').with_args(secret_key_location, 'r') \ .and_return(fake_secret) # mock out finding the shadow node's IP address from the json file flexmock(os.path) os.path.should_call('exists') # set the fall-through os.path.should_receive('exists').with_args( LocalState.get_locations_json_location( self.keyname)).and_return(True) fake_nodes_json = flexmock(name="fake_secret") fake_nodes_json.should_receive('read').and_return( json.dumps({ "node_info": [{ 'public_ip': 'public1', 'private_ip': 'private1', 'jobs': ['login', 'shadow'] }] })) builtins.should_receive('open').with_args( LocalState.get_locations_json_location(self.keyname), 'r') \ .and_return(fake_nodes_json) # mock out grabbing the userappserver ip from an appcontroller property_regex = "property-name-.*" expected = {'a': 'b'} fake_appcontroller = flexmock(name='fake_appcontroller') fake_appcontroller.should_receive('get_property').with_args( property_regex, 'the secret').and_return(json.dumps(expected)) flexmock(SOAPpy) SOAPpy.should_receive('SOAPProxy').with_args('https://public1:17443') \ .and_return(fake_appcontroller) argv = ["--keyname", self.keyname, "--property", property_regex] options = ParseArgs(argv, self.function).args properties = AppScaleTools.get_property(options) self.assertEqual(expected, properties)