From b25c1371f82911ea26b8c893b6612bb5ae0c8c19 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Thu, 1 Mar 2018 20:03:59 +0800 Subject: leverage data_files to eliminate so many hardcoded abs_path_seekings 1. mv conf/ userconfig/ compliance/ patch to etc/ 2. after installation etc/ will be put under /etc/dovetail 3. leveraging /etc/dovetail in coding Change-Id: Icf9cb00ff7fc7cf35755f60d3e258b23e2c70839 Signed-off-by: SerenaFeng --- etc/testcase/osinterop.tc001.yml | 232 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 etc/testcase/osinterop.tc001.yml (limited to 'etc/testcase/osinterop.tc001.yml') diff --git a/etc/testcase/osinterop.tc001.yml b/etc/testcase/osinterop.tc001.yml new file mode 100644 index 00000000..865ee2a1 --- /dev/null +++ b/etc/testcase/osinterop.tc001.yml @@ -0,0 +1,232 @@ +--- +dovetail.osinterop.tc001: + name: dovetail.osinterop.tc001 + objective: > # Set of OpenStack interoperability test cases not flagged and required. It only contains OpenStack core (no object storage) + # The approved guidelines (2016.08) are valid for Kilo, Liberty, Mitaka and Newton releases of OpenStack + # The list can be generated using the Rest API from RefStack project: + # https://refstack.openstack.org/api/v1/guidelines/2016.08/tests?target=compute&type=required&alias=true&flag=false + validate: + type: functest + testcase: refstack_defcore + pre_condition: + - 'cp /home/opnfv/userconfig/pre_config/tempest_conf.yaml /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml' + pre_copy: + src_file: osinterop.txt + dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/refstack_client/defcore.txt + cmds: + - 'functest env prepare' + - 'functest testcase run refstack_defcore -r' + post_condition: + - 'echo test for postcondition in testcase' + report: + sub_testcase_list: + # VIM compute operations test cases + - tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_delete_image + - tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_image_specify_multibyte_character_image_name + - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_host_name_is_same_as_server_name + - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers + - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers_with_detail + - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_created_server_vcpus + - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_server_details + - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_host_name_is_same_as_server_name + - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers + - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers_with_detail + - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_created_server_vcpus + - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_server_details + - tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_get_instance_action + - tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_list_instance_actions + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_flavor + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_image + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_name + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_status + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_limit_results + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_active_status + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_flavor + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_image + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_limit + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_server_name + - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filtered_by_name_wildcard + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_future_date + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_invalid_date + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_greater_than_actual_count + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_negative_value + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_string + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_flavor + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_image + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_server_name + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_detail_server_is_deleted + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_status_non_existing + - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_with_a_deleted_server + - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_lock_unlock_server + - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_reboot_server_hard + - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_rebuild_server + - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_stop_start_server + - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_delete_server_metadata_item + - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_get_server_metadata_item + - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_list_server_metadata + - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata + - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata_item + - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_update_server_metadata + - tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_server_with_admin_password + - tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair + - tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_with_existing_server_name + - tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_access_server_address + - tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_server_name + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_numeric_server_name + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_metadata_exceeds_length_limit + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_name_length_exceeds_256 + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_flavor + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_image + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_network_uuid + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_id_exceeding_length_limit + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_negative_id + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_get_non_existent_server + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_invalid_ip_v6_address + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_reboot_non_existent_server + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_deleted_server + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_non_existent_server + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_server_name_blank + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_stop_non_existent_server + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_name_of_non_existent_server + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_name_length_exceeds_256 + - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_set_empty_name + - tempest.api.compute.test_quotas.QuotasTestJSON.test_get_default_quotas + - tempest.api.compute.test_quotas.QuotasTestJSON.test_get_quotas + - tempest.api.compute.test_versions.TestVersions.test_list_api_versions + - tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_attach_detach_volume + - tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_list_get_volume_attachments + # VIM identity operations test cases + - tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types + - tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources + - tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_statuses + - tempest.api.identity.v3.test_tokens.TokensV3Test.test_create_token + # VIM image operations test cases + - tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_delete_image + - tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_update_image + - tempest.api.image.v2.test_images.ListUserImagesTest.test_get_image_schema + - tempest.api.image.v2.test_images.ListUserImagesTest.test_get_images_schema + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_container_format + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_disk_format + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_limit + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_min_max_size + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_size + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_status + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_visibility + - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_no_params + - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_image_null_id + - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_non_existing_image + - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_delete_deleted_image + - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_image_null_id + - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_non_existent_image + - tempest.api.image.v2.test_images_tags.ImagesTagsTest.test_update_delete_tags_for_image + - tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_delete_non_existing_tag + - tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_update_tags_for_non_existing_image + # VIM network operations test cases + - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_all_attributes + - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_allocation_pools + - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_dhcp_enabled + - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw + - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw_and_allocation_pools + - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_host_routes_and_dns_nameservers + - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_without_gateway + - tempest.api.network.test_networks.NetworksTest.test_create_update_delete_network_subnet + - tempest.api.network.test_networks.NetworksTest.test_delete_network_with_subnet + - tempest.api.network.test_networks.NetworksTest.test_list_networks + - tempest.api.network.test_networks.NetworksTest.test_list_networks_fields + - tempest.api.network.test_networks.NetworksTest.test_list_subnets + - tempest.api.network.test_networks.NetworksTest.test_list_subnets_fields + - tempest.api.network.test_networks.NetworksTest.test_show_network + - tempest.api.network.test_networks.NetworksTest.test_show_network_fields + - tempest.api.network.test_networks.NetworksTest.test_show_subnet + - tempest.api.network.test_networks.NetworksTest.test_show_subnet_fields + - tempest.api.network.test_networks.NetworksTest.test_update_subnet_gw_dns_host_routes_dhcp + - tempest.api.network.test_ports.PortsTestJSON.test_create_bulk_port + - tempest.api.network.test_ports.PortsTestJSON.test_create_port_in_allowed_allocation_pools + - tempest.api.network.test_ports.PortsTestJSON.test_create_update_delete_port + - tempest.api.network.test_ports.PortsTestJSON.test_list_ports + - tempest.api.network.test_ports.PortsTestJSON.test_list_ports_fields + - tempest.api.network.test_ports.PortsTestJSON.test_show_port + - tempest.api.network.test_ports.PortsTestJSON.test_show_port_fields + - tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_security_group_and_extra_attributes + - tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_two_security_groups_and_extra_attributes + - tempest.api.network.test_security_groups.SecGroupTest.test_create_list_update_show_delete_security_group + - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_additional_args + - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_icmp_type_code + - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_protocol_integer_value + - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_group_id + - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_ip_prefix + - tempest.api.network.test_security_groups.SecGroupTest.test_create_show_delete_security_group_rule + - tempest.api.network.test_security_groups.SecGroupTest.test_list_security_groups + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_additional_default_security_group_fails + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_duplicate_security_group_rule_fails + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_ethertype + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_protocol + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_remote_ip_prefix + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_invalid_ports + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_remote_groupid + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_security_group + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_delete_non_existent_security_group + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group + - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group_rule + # VIM volume operations test cases + - tempest.api.volume.test_availability_zone.AvailabilityZoneV2TestJSON.test_get_availability_zone_list + - tempest.api.volume.test_extensions.ExtensionsV2TestJSON.test_list_extensions + - tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_crud_snapshot_metadata + - tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_update_snapshot_metadata_item + - tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_crud_volume_metadata + - tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_update_volume_metadata_item + - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_attach_detach_volume_to_instance + - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_get_volume_attachment + - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_reserve_unreserve_volume + - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_bootable + - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_readonly_update + - tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete + - tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_as_clone + - tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_from_image + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_by_name + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_by_name + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_param_display_name_and_status + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_display_name_and_status + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_metadata + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_details + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_param_metadata + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_availability_zone + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_status + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_availability_zone + - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_status + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_attach_volumes_with_nonexistent_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_invalid_size + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_snapshot_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_source_volid + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_volume_type + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_negative + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_zero + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_without_passing_size + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_invalid_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_volume_without_passing_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_detach_volumes_with_invalid_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_invalid_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_volume_without_passing_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_invalid_status + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_nonexistent_name + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_invalid_status + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_nonexistent_name + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_negative_volume_status + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_nonexistent_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_unreserve_volume_with_nonexistent_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_empty_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_invalid_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_nonexistent_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_delete_nonexistent_volume_id + - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_get_nonexistent_volume_id + - tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshot_create_get_list_update_delete + - tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_volume_from_snapshot + - tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_details_with_params + - tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_with_params + - tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id + - tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id + - tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_pagination + - tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_with_multiple_params + - tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_pagination -- cgit 1.2.3-korg