def test_parse_meta_json_keys_values(stc):
    plLogger = PLLogger.GetLogger('methodology')
    plLogger.LogInfo("begin test_parse_meta_json_keys_values")

    # Valid methodology json
    input_json = get_sample_2544_json()

    attr1 = "CommandAddressStartValue"
    attr2 = "CommandAddressStepValue"
    attr3 = "TrafficDuration"
    attr4 = "ObjectIteratorCommand.ValueList"
    attr5 = "testGuiOnly"

    val1 = "198.18.1.2"
    val2 = "0.0.1.0"
    val3 = "60"
    val4 = ["64", "128", "256", "512", "1024", "1280", "1518"]
    val5 = "10"

    # Load the json
    err_str, json_dict = json_utils.load_json(input_json)
    assert err_str == ""
    assert json_dict is not None

    # Call the parse function
    key_val_dict, gui_key_val_dict = ConfigCmd.parse_meta_json_keys_values(json_dict)
    assert key_val_dict is not None
    assert gui_key_val_dict == {'testGuiOnly': '10'}
    plLogger.LogInfo("key_val_dict: " + str(key_val_dict))
    assert len(key_val_dict.keys()) == 7

    # Check the keys
    for kv_pair in zip([attr1, attr2, attr3, attr4, attr5], [val1, val2, val3, val4, val5]):
        assert kv_pair[0] in key_val_dict.keys()
        assert key_val_dict[kv_pair[0]] == kv_pair[1]
def test_parse_meta_json_keys_values_invalid_json(stc):
    plLogger = PLLogger.GetLogger('methodology')
    plLogger.LogInfo("begin test_parse_meta_json_keys_values_invalid_json")

    # No property_groups
    input_json = '''{
        "methodology_key": "RFC2544THROUGHPUT",
        "display_name": "RFC 2544 Throughput Test",
        "version": "1-0-0",
        "feature_ids": [],
        "port_groups": []
    }'''

    # Load the json
    err_str, json_dict = json_utils.load_json(input_json)
    assert err_str == ""
    assert json_dict is not None

    # Call the parse function
    key_val_dict, gui_key_val_dict = ConfigCmd.parse_meta_json_keys_values(json_dict)
    assert key_val_dict == {}
    assert gui_key_val_dict == {}

    # No test_properties
    input_json = '''{
        "methodology_key": "RFC2544THROUGHPUT",
        "display_name": "RFC 2544 Throughput Test",
        "version": "1-0-0",
        "feature_ids": [],
        "port_groups": [],
        "property_groups": []
    }'''

    # Load the json
    err_str, json_dict = json_utils.load_json(input_json)
    assert err_str == ""
    assert json_dict is not None

    # Call the parse function
    key_val_dict, gui_key_val_dict = ConfigCmd.parse_meta_json_keys_values(json_dict)
    assert key_val_dict == {}
    assert gui_key_val_dict == {}

    # Missing property_value and empty test_properties
    input_json = '''{
        "methodology_key": "RFC2544THROUGHPUT",
        "display_name": "RFC 2544 Throughput Test",
        "version": "1-0-0",
        "feature_ids": [],
        "port_groups": [],
        "property_groups": [
            {
                "prop_id": "leftEndpointConfig",
                "display_name": "Left Endpoint Addressing",
                "test_properties": [
                    {
                        "prop_id": "CommandAddressStartValue"
                    },
                    {
                        "prop_id": "CommandAddressStepValue",
                        "property_value": "0.0.1.0"
                    }
                ]
            },
            {
                "prop_id": "test",
                "display_name": "Test",
                "test_properties": []
            }
        ]
    }'''

    attr1 = "CommandAddressStepValue"
    val1 = "0.0.1.0"

    # Load the json
    err_str, json_dict = json_utils.load_json(input_json)
    assert err_str == ""
    assert json_dict is not None

    # Call the parse function
    key_val_dict, gui_key_val_dict = ConfigCmd.parse_meta_json_keys_values(json_dict)
    assert key_val_dict is not None
    assert gui_key_val_dict == {}
    plLogger.LogInfo("key_val_dict: " + str(key_val_dict))
    assert len(key_val_dict.keys()) == 1

    # Check the keys
    for kv_pair in zip([attr1], [str(val1)]):
        assert kv_pair[0] in key_val_dict.keys()
        assert key_val_dict[kv_pair[0]] == kv_pair[1]