def test_zuul_layout(self):
        renamelist = [
            'glance',  # openstack project that doesn't need to be renamed
            'fuel',  # fake project but this text exists in places in the projects.yaml file
            'fuel-tasklib',  # stackforge project with groups and other nested attributes
            'xstatic-jquery.tablesorter',  # stackforge project with acl attribute
            'anvil',  # stackforge project, minimal attributes
            'fake-project',  # project name doesn't exist
            'anvil-fake'  # non-existant project with similar prefix
        ]

        # not currently needed because the actual script shells out to sed
        layoutYaml = """
        """

        openlist = mass_rename_projects.build_list(
            'openstack',
            renamelist)  # zuul layout just uses the openlist as its data

        expectedOpenlist = [
            'openstack/glance', 'openstack/fuel', 'openstack/fuel-tasklib',
            'openstack/xstatic-jquery.tablesorter', 'openstack/anvil',
            'openstack/fake-project', 'openstack/anvil-fake'
        ]

        six.assertCountEqual(self, openlist, expectedOpenlist,
                             "Check zuul layout data")
    def test_zuul_layout(self):
        renamelist = [
            'glance', # openstack project that doesn't need to be renamed
            'fuel', # fake project but this text exists in places in the projects.yaml file
            'fuel-tasklib', # stackforge project with groups and other nested attributes
            'xstatic-jquery.tablesorter', # stackforge project with acl attribute
            'anvil', # stackforge project, minimal attributes
            'fake-project', # project name doesn't exist
            'anvil-fake' # non-existant project with similar prefix
        ]

        # not currently needed because the actual script shells out to sed
        layoutYaml = """
        """

        openlist = mass_rename_projects.build_list('openstack', renamelist) # zuul layout just uses the openlist as its data

        expectedOpenlist = [
            'openstack/glance',
            'openstack/fuel',
            'openstack/fuel-tasklib',
            'openstack/xstatic-jquery.tablesorter',
            'openstack/anvil',
            'openstack/fake-project',
            'openstack/anvil-fake'
        ]

        six.assertCountEqual(self, openlist, expectedOpenlist, "Check zuul layout data")
    def test_projects_yaml(self):
        renamelist = [
            'glance',  # openstack project that doesn't need to be renamed
            'fuel',  # fake project but this text exists in places in the projects.yaml file
            'fuel-tasklib',  # stackforge project with groups and other nested attributes
            'xstatic-jquery.tablesorter',  # stackforge project with acl attribute
            'anvil',  # stackforge project, minimal attributes
            'fake-project',  # project name doesn't exist
            'anvil-fake'  # non-existant project with similar prefix
        ]

        projectYaml = """
- project: stackforge/anvil
  description: A set of python scripts and utilities to forge raw OpenStack into a productive tool!
- project: openstack/glance
  docimpact-group: openstack-manuals
  description: OpenStack Image Management (Glance)
  options:
    - translate
- project: stackforge/fuel-stats
  groups:
    - fuel
  description: Fuel anonymous statistics collector
  docimpact-group: fuel
- project: stackforge/fuel-tasklib
  description: Fuel tasks library.
  docimpact-group: fuel
  groups:
    - fuel
- project: stackforge/xstatic-jquery.tablesorter
  description: Tablesorter jQuery plugin packaged as XStatic.
  acl-config: /home/gerrit2/acls/stackforge/xstatic.config
- project: stackforge/yaql
  description: Yet another query language
        """
        data = yaml.load(projectYaml)

        stacklist = mass_rename_projects.build_list("stackforge", renamelist)

        result = mass_rename_projects.build_project_data(stacklist, data)
        gotData = result.data
        gotGitmoves = result.gitmoves

        # check result
        expectedData = [{
            'project':
            'openstack/anvil',
            'description':
            'A set of python scripts and utilities to forge raw OpenStack into a productive tool!'
        }, {
            'project': 'openstack/fuel-tasklib',
            'docimpact-group': 'fuel',
            'description': 'Fuel tasks library.',
            'groups': ['fuel']
        }, {
            'project': 'openstack/glance',
            'docimpact-group': 'openstack-manuals',
            'description': 'OpenStack Image Management (Glance)',
            'options': ['translate']
        }, {
            'project': 'stackforge/fuel-stats',
            'docimpact-group': 'fuel',
            'description': 'Fuel anonymous statistics collector',
            'groups': ['fuel']
        }, {
            'project':
            'openstack/xstatic-jquery.tablesorter',
            'acl-config':
            '/home/gerrit2/acls/openstack/xstatic.config',
            'description':
            'Tablesorter jQuery plugin packaged as XStatic.'
        }, {
            'project': 'stackforge/yaql',
            'description': 'Yet another query language'
        }]

        six.assertCountEqual(self, gotData, expectedData,
                             "Check results of projects.yaml renames")

        # check gitmoves, should only be stackforge projects
        expectedGitmoves = {
            'gerrit/acls/stackforge/anvil.config':
            'gerrit/acls/openstack/anvil.config',
            'gerrit/acls/stackforge/xstatic.config':
            'gerrit/acls/openstack/xstatic.config',
            'gerrit/acls/stackforge/fuel-tasklib.config':
            'gerrit/acls/openstack/fuel-tasklib.config'
        }

        six.assertCountEqual(
            self, gotGitmoves, expectedGitmoves,
            "Check git command output for projects.yaml renames")
    def test_channels_yaml(self):
        channelsYaml = """
fuel-tracker:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - openstack/fuel-plugin-bigswitch
    - openstack/fuel-plugin-block-device
    - openstack/fuel-plugin-openbook
    - openstack/fuel-plugin-purestorage-cinder
    - openstack/fuel-plugin-scaleio
    - openstack/fuel-plugin-wstunnel
    - openstack/fuel-plugin-xenserver
    - openstack/fuel-plugin-zabbix-agents
    - stackforge/fuel-agent
    - stackforge/fuel-astute
    - stackforge/fuel-dev-tools
    - stackforge/fuel-devops
    - stackforge/fuel-docs
    - stackforge/fuel-library
    - stackforge/fuel-main
    - stackforge/fuel-mirror
    - stackforge/fuel-nailgun-agent
    - stackforge/fuel-octane
    - stackforge/fuel-ostf
    - stackforge/fuel-plugin-availability-zones
    - stackforge/fuel-plugin-calamari
    - stackforge/fuel-plugin-calico
    - stackforge/fuel-plugin-ceilometer-redis
    - stackforge/fuel-plugin-cinder-netapp
    - stackforge/fuel-plugin-cisco-aci
    - stackforge/fuel-plugin-contrail
    - stackforge/fuel-plugin-dbaas-trove
    - stackforge/fuel-plugin-detach-database
    - stackforge/fuel-plugin-detach-keystone
    - stackforge/fuel-plugin-detach-rabbitmq
    - stackforge/fuel-plugin-elasticsearch-kibana
    - stackforge/fuel-plugin-external-emc
    - stackforge/fuel-plugin-external-glusterfs
    - stackforge/fuel-plugin-external-zabbix
    - stackforge/fuel-plugin-glance-nfs
    - stackforge/fuel-plugin-ha-fencing
    - stackforge/fuel-plugin-influxdb-grafana
    - stackforge/fuel-plugin-ironic
    - stackforge/fuel-plugin-ldap
    - stackforge/fuel-plugin-lma-collector
    - stackforge/fuel-plugin-lma-infrastructure-alerting
    - stackforge/fuel-plugin-mellanox
    - stackforge/fuel-plugin-midonet
    - stackforge/fuel-plugin-neutron-fwaas
    - stackforge/fuel-plugin-neutron-lbaas
    - stackforge/fuel-plugin-neutron-vpnaas
    - stackforge/fuel-plugin-nova-nfs
    - stackforge/fuel-plugin-nsxv
    - stackforge/fuel-plugin-opendaylight
    - stackforge/fuel-plugin-saltstack
    - stackforge/fuel-plugin-solidfire-cinder
    - stackforge/fuel-plugin-swiftstack
    - stackforge/fuel-plugin-tintri-cinder
    - stackforge/fuel-plugin-tls
    - stackforge/fuel-plugin-vmware-dvs
    - stackforge/fuel-plugin-vxlan
    - stackforge/fuel-plugin-zabbix-monitoring-emc
    - stackforge/fuel-plugin-zabbix-monitoring-extreme-networks
    - stackforge/fuel-plugin-zabbix-snmptrapd
    - stackforge/fuel-plugins
    - stackforge/fuel-provision
    - stackforge/fuel-qa
    - stackforge/fuel-specs
    - stackforge/fuel-stats
    - stackforge/fuel-tasklib
    - stackforge/fuel-upgrade
    - stackforge/fuel-web
    - stackforge/python-fuelclient
  branches:
    - master
openstack-anvil:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - stackforge/anvil
  branches:
    - master
openstack-glance:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - openstack/glance
    - openstack/glance-specs
    - openstack/glance_store
    - openstack/python-glanceclient
  branches:
    - master
openstack-horizon:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - openstack/django-openstack-auth-kerberos
    - openstack/django_openstack_auth
    - openstack/horizon
    - openstack/manila-ui
    - openstack/tuskar-ui
    - stackforge/xstatic-angular
    - stackforge/xstatic-angular-animate
    - stackforge/xstatic-angular-bootstrap
    - stackforge/xstatic-angular-cookies
    - stackforge/xstatic-angular-fileupload
    - stackforge/xstatic-angular-lrdragndrop
    - stackforge/xstatic-angular-mock
    - stackforge/xstatic-angular-sanitize
    - stackforge/xstatic-angular-smart-table
    - stackforge/xstatic-bootstrap-datepicker
    - stackforge/xstatic-bootstrap-scss
    - stackforge/xstatic-d3
    - stackforge/xstatic-font-awesome
    - stackforge/xstatic-hogan
    - stackforge/xstatic-jasmine
    - stackforge/xstatic-jquery-migrate
    - stackforge/xstatic-jquery.bootstrap.wizard
    - stackforge/xstatic-jquery.quicksearch
    - stackforge/xstatic-jquery.tablesorter
    - stackforge/xstatic-jsencrypt
    - stackforge/xstatic-magic-search
    - stackforge/xstatic-qunit
    - stackforge/xstatic-rickshaw
    - stackforge/xstatic-spin
  branches:
    - master
        """

        renamelist = [
            'glance',  # openstack project that doesn't need to be renamed
            'fuel',  # fake project but this text exists in places in the projects.yaml file
            'fuel-tasklib',  # stackforge project with groups and other nested attributes
            'xstatic-jquery.tablesorter',  # stackforge project with acl attribute
            'anvil',  # stackforge project, minimal attributes
            'fake-project',  # project name doesn't exist
            'anvil-fake'  # non-existant project with similar prefix
        ]

        data = yaml.load(channelsYaml)

        stacklist = mass_rename_projects.build_list("stackforge", renamelist)

        gotData = mass_rename_projects.build_channel_data(stacklist, data)

        # check result
        expectedData = {
            'fuel-tracker': {
                'branches': ['master'],
                'events':
                ['patchset-created', 'change-merged', 'x-vrif-minus-2'],
                'projects': [
                    'openstack/fuel-plugin-bigswitch',
                    'openstack/fuel-plugin-block-device',
                    'openstack/fuel-plugin-openbook',
                    'openstack/fuel-plugin-purestorage-cinder',
                    'openstack/fuel-plugin-scaleio',
                    'openstack/fuel-plugin-wstunnel',
                    'openstack/fuel-plugin-xenserver',
                    'openstack/fuel-plugin-zabbix-agents',
                    'openstack/fuel-tasklib', 'stackforge/fuel-agent',
                    'stackforge/fuel-astute', 'stackforge/fuel-dev-tools',
                    'stackforge/fuel-devops', 'stackforge/fuel-docs',
                    'stackforge/fuel-library', 'stackforge/fuel-main',
                    'stackforge/fuel-mirror', 'stackforge/fuel-nailgun-agent',
                    'stackforge/fuel-octane', 'stackforge/fuel-ostf',
                    'stackforge/fuel-plugin-availability-zones',
                    'stackforge/fuel-plugin-calamari',
                    'stackforge/fuel-plugin-calico',
                    'stackforge/fuel-plugin-ceilometer-redis',
                    'stackforge/fuel-plugin-cinder-netapp',
                    'stackforge/fuel-plugin-cisco-aci',
                    'stackforge/fuel-plugin-contrail',
                    'stackforge/fuel-plugin-dbaas-trove',
                    'stackforge/fuel-plugin-detach-database',
                    'stackforge/fuel-plugin-detach-keystone',
                    'stackforge/fuel-plugin-detach-rabbitmq',
                    'stackforge/fuel-plugin-elasticsearch-kibana',
                    'stackforge/fuel-plugin-external-emc',
                    'stackforge/fuel-plugin-external-glusterfs',
                    'stackforge/fuel-plugin-external-zabbix',
                    'stackforge/fuel-plugin-glance-nfs',
                    'stackforge/fuel-plugin-ha-fencing',
                    'stackforge/fuel-plugin-influxdb-grafana',
                    'stackforge/fuel-plugin-ironic',
                    'stackforge/fuel-plugin-ldap',
                    'stackforge/fuel-plugin-lma-collector',
                    'stackforge/fuel-plugin-lma-infrastructure-alerting',
                    'stackforge/fuel-plugin-mellanox',
                    'stackforge/fuel-plugin-midonet',
                    'stackforge/fuel-plugin-neutron-fwaas',
                    'stackforge/fuel-plugin-neutron-lbaas',
                    'stackforge/fuel-plugin-neutron-vpnaas',
                    'stackforge/fuel-plugin-nova-nfs',
                    'stackforge/fuel-plugin-nsxv',
                    'stackforge/fuel-plugin-opendaylight',
                    'stackforge/fuel-plugin-saltstack',
                    'stackforge/fuel-plugin-solidfire-cinder',
                    'stackforge/fuel-plugin-swiftstack',
                    'stackforge/fuel-plugin-tintri-cinder',
                    'stackforge/fuel-plugin-tls',
                    'stackforge/fuel-plugin-vmware-dvs',
                    'stackforge/fuel-plugin-vxlan',
                    'stackforge/fuel-plugin-zabbix-monitoring-emc',
                    'stackforge/fuel-plugin-zabbix-monitoring-extreme-networks',
                    'stackforge/fuel-plugin-zabbix-snmptrapd',
                    'stackforge/fuel-plugins', 'stackforge/fuel-provision',
                    'stackforge/fuel-qa', 'stackforge/fuel-specs',
                    'stackforge/fuel-stats', 'stackforge/fuel-upgrade',
                    'stackforge/fuel-web', 'stackforge/python-fuelclient'
                ]
            },
            'openstack-glance': {
                'branches': ['master'],
                'events':
                ['patchset-created', 'change-merged', 'x-vrif-minus-2'],
                'projects': [
                    'openstack/glance', 'openstack/glance-specs',
                    'openstack/glance_store', 'openstack/python-glanceclient'
                ]
            },
            'openstack-anvil': {
                'branches': ['master'],
                'events':
                ['patchset-created', 'change-merged', 'x-vrif-minus-2'],
                'projects': ['openstack/anvil']
            },
            'openstack-horizon': {
                'branches': ['master'],
                'events':
                ['patchset-created', 'change-merged', 'x-vrif-minus-2'],
                'projects': [
                    'openstack/django-openstack-auth-kerberos',
                    'openstack/django_openstack_auth', 'openstack/horizon',
                    'openstack/manila-ui', 'openstack/tuskar-ui',
                    'openstack/xstatic-jquery.tablesorter',
                    'stackforge/xstatic-angular',
                    'stackforge/xstatic-angular-animate',
                    'stackforge/xstatic-angular-bootstrap',
                    'stackforge/xstatic-angular-cookies',
                    'stackforge/xstatic-angular-fileupload',
                    'stackforge/xstatic-angular-lrdragndrop',
                    'stackforge/xstatic-angular-mock',
                    'stackforge/xstatic-angular-sanitize',
                    'stackforge/xstatic-angular-smart-table',
                    'stackforge/xstatic-bootstrap-datepicker',
                    'stackforge/xstatic-bootstrap-scss',
                    'stackforge/xstatic-d3', 'stackforge/xstatic-font-awesome',
                    'stackforge/xstatic-hogan', 'stackforge/xstatic-jasmine',
                    'stackforge/xstatic-jquery-migrate',
                    'stackforge/xstatic-jquery.bootstrap.wizard',
                    'stackforge/xstatic-jquery.quicksearch',
                    'stackforge/xstatic-jsencrypt',
                    'stackforge/xstatic-magic-search',
                    'stackforge/xstatic-qunit', 'stackforge/xstatic-rickshaw',
                    'stackforge/xstatic-spin'
                ]
            }
        }
        six.assertCountEqual(self, gotData, expectedData,
                             "Check result for channels.yaml renames")
    def test_projects_yaml(self):
        renamelist = [
            'glance', # openstack project that doesn't need to be renamed
            'fuel', # fake project but this text exists in places in the projects.yaml file
            'fuel-tasklib', # stackforge project with groups and other nested attributes
            'xstatic-jquery.tablesorter', # stackforge project with acl attribute
            'anvil', # stackforge project, minimal attributes
            'fake-project', # project name doesn't exist
            'anvil-fake' # non-existant project with similar prefix
        ]

        projectYaml = """
- project: stackforge/anvil
  description: A set of python scripts and utilities to forge raw OpenStack into a productive tool!
- project: openstack/glance
  docimpact-group: openstack-manuals
  description: OpenStack Image Management (Glance)
  options:
    - translate
- project: stackforge/fuel-stats
  groups:
    - fuel
  description: Fuel anonymous statistics collector
  docimpact-group: fuel
- project: stackforge/fuel-tasklib
  description: Fuel tasks library.
  docimpact-group: fuel
  groups:
    - fuel
- project: stackforge/xstatic-jquery.tablesorter
  description: Tablesorter jQuery plugin packaged as XStatic.
  acl-config: /home/gerrit2/acls/stackforge/xstatic.config
- project: stackforge/yaql
  description: Yet another query language
        """
        data = yaml.load(projectYaml)

        stacklist = mass_rename_projects.build_list("stackforge", renamelist)

        result = mass_rename_projects.build_project_data(stacklist, data)
        gotData = result.data
        gotGitmoves = result.gitmoves

        # check result
        expectedData = [
            {
                'project': 'openstack/anvil',
                'description': 'A set of python scripts and utilities to forge raw OpenStack into a productive tool!'
            },
            {
                'project': 'openstack/fuel-tasklib',
                'docimpact-group': 'fuel',
                'description': 'Fuel tasks library.',
                'groups': ['fuel']
            },
            {
                'project': 'openstack/glance',
                'docimpact-group': 'openstack-manuals',
                'description': 'OpenStack Image Management (Glance)',
                'options': ['translate']},
            {
                'project': 'stackforge/fuel-stats',
                'docimpact-group': 'fuel',
                'description': 'Fuel anonymous statistics collector',
                'groups': ['fuel']
            },
            {
                'project': 'openstack/xstatic-jquery.tablesorter',
                'acl-config': '/home/gerrit2/acls/openstack/xstatic.config',
                'description': 'Tablesorter jQuery plugin packaged as XStatic.'},
            {
                'project': 'stackforge/yaql',
                'description': 'Yet another query language'
            }
        ]

        six.assertCountEqual(self, gotData, expectedData, "Check results of projects.yaml renames")

        # check gitmoves, should only be stackforge projects
        expectedGitmoves = {
            'gerrit/acls/stackforge/anvil.config'       : 'gerrit/acls/openstack/anvil.config',
            'gerrit/acls/stackforge/xstatic.config'     : 'gerrit/acls/openstack/xstatic.config',
            'gerrit/acls/stackforge/fuel-tasklib.config': 'gerrit/acls/openstack/fuel-tasklib.config'
        }

        six.assertCountEqual(self, gotGitmoves, expectedGitmoves, "Check git command output for projects.yaml renames")
    def test_channels_yaml(self):
        channelsYaml = """
fuel-tracker:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - openstack/fuel-plugin-bigswitch
    - openstack/fuel-plugin-block-device
    - openstack/fuel-plugin-openbook
    - openstack/fuel-plugin-purestorage-cinder
    - openstack/fuel-plugin-scaleio
    - openstack/fuel-plugin-wstunnel
    - openstack/fuel-plugin-xenserver
    - openstack/fuel-plugin-zabbix-agents
    - stackforge/fuel-agent
    - stackforge/fuel-astute
    - stackforge/fuel-dev-tools
    - stackforge/fuel-devops
    - stackforge/fuel-docs
    - stackforge/fuel-library
    - stackforge/fuel-main
    - stackforge/fuel-mirror
    - stackforge/fuel-nailgun-agent
    - stackforge/fuel-octane
    - stackforge/fuel-ostf
    - stackforge/fuel-plugin-availability-zones
    - stackforge/fuel-plugin-calamari
    - stackforge/fuel-plugin-calico
    - stackforge/fuel-plugin-ceilometer-redis
    - stackforge/fuel-plugin-cinder-netapp
    - stackforge/fuel-plugin-cisco-aci
    - stackforge/fuel-plugin-contrail
    - stackforge/fuel-plugin-dbaas-trove
    - stackforge/fuel-plugin-detach-database
    - stackforge/fuel-plugin-detach-keystone
    - stackforge/fuel-plugin-detach-rabbitmq
    - stackforge/fuel-plugin-elasticsearch-kibana
    - stackforge/fuel-plugin-external-emc
    - stackforge/fuel-plugin-external-glusterfs
    - stackforge/fuel-plugin-external-zabbix
    - stackforge/fuel-plugin-glance-nfs
    - stackforge/fuel-plugin-ha-fencing
    - stackforge/fuel-plugin-influxdb-grafana
    - stackforge/fuel-plugin-ironic
    - stackforge/fuel-plugin-ldap
    - stackforge/fuel-plugin-lma-collector
    - stackforge/fuel-plugin-lma-infrastructure-alerting
    - stackforge/fuel-plugin-mellanox
    - stackforge/fuel-plugin-midonet
    - stackforge/fuel-plugin-neutron-fwaas
    - stackforge/fuel-plugin-neutron-lbaas
    - stackforge/fuel-plugin-neutron-vpnaas
    - stackforge/fuel-plugin-nova-nfs
    - stackforge/fuel-plugin-nsxv
    - stackforge/fuel-plugin-opendaylight
    - stackforge/fuel-plugin-saltstack
    - stackforge/fuel-plugin-solidfire-cinder
    - stackforge/fuel-plugin-swiftstack
    - stackforge/fuel-plugin-tintri-cinder
    - stackforge/fuel-plugin-tls
    - stackforge/fuel-plugin-vmware-dvs
    - stackforge/fuel-plugin-vxlan
    - stackforge/fuel-plugin-zabbix-monitoring-emc
    - stackforge/fuel-plugin-zabbix-monitoring-extreme-networks
    - stackforge/fuel-plugin-zabbix-snmptrapd
    - stackforge/fuel-plugins
    - stackforge/fuel-provision
    - stackforge/fuel-qa
    - stackforge/fuel-specs
    - stackforge/fuel-stats
    - stackforge/fuel-tasklib
    - stackforge/fuel-upgrade
    - stackforge/fuel-web
    - stackforge/python-fuelclient
  branches:
    - master
openstack-anvil:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - stackforge/anvil
  branches:
    - master
openstack-glance:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - openstack/glance
    - openstack/glance-specs
    - openstack/glance_store
    - openstack/python-glanceclient
  branches:
    - master
openstack-horizon:
  events:
    - patchset-created
    - change-merged
    - x-vrif-minus-2
  projects:
    - openstack/django-openstack-auth-kerberos
    - openstack/django_openstack_auth
    - openstack/horizon
    - openstack/manila-ui
    - openstack/tuskar-ui
    - stackforge/xstatic-angular
    - stackforge/xstatic-angular-animate
    - stackforge/xstatic-angular-bootstrap
    - stackforge/xstatic-angular-cookies
    - stackforge/xstatic-angular-fileupload
    - stackforge/xstatic-angular-lrdragndrop
    - stackforge/xstatic-angular-mock
    - stackforge/xstatic-angular-sanitize
    - stackforge/xstatic-angular-smart-table
    - stackforge/xstatic-bootstrap-datepicker
    - stackforge/xstatic-bootstrap-scss
    - stackforge/xstatic-d3
    - stackforge/xstatic-font-awesome
    - stackforge/xstatic-hogan
    - stackforge/xstatic-jasmine
    - stackforge/xstatic-jquery-migrate
    - stackforge/xstatic-jquery.bootstrap.wizard
    - stackforge/xstatic-jquery.quicksearch
    - stackforge/xstatic-jquery.tablesorter
    - stackforge/xstatic-jsencrypt
    - stackforge/xstatic-magic-search
    - stackforge/xstatic-qunit
    - stackforge/xstatic-rickshaw
    - stackforge/xstatic-spin
  branches:
    - master
        """

        renamelist = [
            'glance', # openstack project that doesn't need to be renamed
            'fuel', # fake project but this text exists in places in the projects.yaml file
            'fuel-tasklib', # stackforge project with groups and other nested attributes
            'xstatic-jquery.tablesorter', # stackforge project with acl attribute
            'anvil', # stackforge project, minimal attributes
            'fake-project', # project name doesn't exist
            'anvil-fake' # non-existant project with similar prefix
        ]

        data = yaml.load(channelsYaml)

        stacklist = mass_rename_projects.build_list("stackforge", renamelist)

        gotData = mass_rename_projects.build_channel_data(stacklist, data)

        # check result
        expectedData = {
    'fuel-tracker': {
        'branches': [
            'master'
        ],
        'events': [
            'patchset-created',
            'change-merged',
            'x-vrif-minus-2'
        ],
        'projects': [
            'openstack/fuel-plugin-bigswitch',
            'openstack/fuel-plugin-block-device',
            'openstack/fuel-plugin-openbook',
            'openstack/fuel-plugin-purestorage-cinder',
            'openstack/fuel-plugin-scaleio',
            'openstack/fuel-plugin-wstunnel',
            'openstack/fuel-plugin-xenserver',
            'openstack/fuel-plugin-zabbix-agents',
            'openstack/fuel-tasklib',
            'stackforge/fuel-agent',
            'stackforge/fuel-astute',
            'stackforge/fuel-dev-tools',
            'stackforge/fuel-devops',
            'stackforge/fuel-docs',
            'stackforge/fuel-library',
            'stackforge/fuel-main',
            'stackforge/fuel-mirror',
            'stackforge/fuel-nailgun-agent',
            'stackforge/fuel-octane',
            'stackforge/fuel-ostf',
            'stackforge/fuel-plugin-availability-zones',
            'stackforge/fuel-plugin-calamari',
            'stackforge/fuel-plugin-calico',
            'stackforge/fuel-plugin-ceilometer-redis',
            'stackforge/fuel-plugin-cinder-netapp',
            'stackforge/fuel-plugin-cisco-aci',
            'stackforge/fuel-plugin-contrail',
            'stackforge/fuel-plugin-dbaas-trove',
            'stackforge/fuel-plugin-detach-database',
            'stackforge/fuel-plugin-detach-keystone',
            'stackforge/fuel-plugin-detach-rabbitmq',
            'stackforge/fuel-plugin-elasticsearch-kibana',
            'stackforge/fuel-plugin-external-emc',
            'stackforge/fuel-plugin-external-glusterfs',
            'stackforge/fuel-plugin-external-zabbix',
            'stackforge/fuel-plugin-glance-nfs',
            'stackforge/fuel-plugin-ha-fencing',
            'stackforge/fuel-plugin-influxdb-grafana',
            'stackforge/fuel-plugin-ironic',
            'stackforge/fuel-plugin-ldap',
            'stackforge/fuel-plugin-lma-collector',
            'stackforge/fuel-plugin-lma-infrastructure-alerting',
            'stackforge/fuel-plugin-mellanox',
            'stackforge/fuel-plugin-midonet',
            'stackforge/fuel-plugin-neutron-fwaas',
            'stackforge/fuel-plugin-neutron-lbaas',
            'stackforge/fuel-plugin-neutron-vpnaas',
            'stackforge/fuel-plugin-nova-nfs',
            'stackforge/fuel-plugin-nsxv',
            'stackforge/fuel-plugin-opendaylight',
            'stackforge/fuel-plugin-saltstack',
            'stackforge/fuel-plugin-solidfire-cinder',
            'stackforge/fuel-plugin-swiftstack',
            'stackforge/fuel-plugin-tintri-cinder',
            'stackforge/fuel-plugin-tls',
            'stackforge/fuel-plugin-vmware-dvs',
            'stackforge/fuel-plugin-vxlan',
            'stackforge/fuel-plugin-zabbix-monitoring-emc',
            'stackforge/fuel-plugin-zabbix-monitoring-extreme-networks',
            'stackforge/fuel-plugin-zabbix-snmptrapd',
            'stackforge/fuel-plugins',
            'stackforge/fuel-provision',
            'stackforge/fuel-qa',
            'stackforge/fuel-specs',
            'stackforge/fuel-stats',
            'stackforge/fuel-upgrade',
            'stackforge/fuel-web',
            'stackforge/python-fuelclient'
        ]
    },
    'openstack-glance': {
        'branches': [
            'master'
        ],
        'events': [
            'patchset-created',
            'change-merged',
            'x-vrif-minus-2'
        ],
        'projects': [
            'openstack/glance',
            'openstack/glance-specs',
            'openstack/glance_store',
            'openstack/python-glanceclient'
        ]
    },
    'openstack-anvil': {
        'branches': [
            'master'
        ],
        'events': [
            'patchset-created',
            'change-merged',
            'x-vrif-minus-2'
        ],
        'projects': [
            'openstack/anvil'
        ]
    },
    'openstack-horizon': {
        'branches': [
            'master'
        ],
        'events': [
            'patchset-created',
            'change-merged',
            'x-vrif-minus-2'
        ],
        'projects': [
            'openstack/django-openstack-auth-kerberos',
            'openstack/django_openstack_auth',
            'openstack/horizon',
            'openstack/manila-ui',
            'openstack/tuskar-ui',
            'openstack/xstatic-jquery.tablesorter',
            'stackforge/xstatic-angular',
            'stackforge/xstatic-angular-animate',
            'stackforge/xstatic-angular-bootstrap',
            'stackforge/xstatic-angular-cookies',
            'stackforge/xstatic-angular-fileupload',
            'stackforge/xstatic-angular-lrdragndrop',
            'stackforge/xstatic-angular-mock',
            'stackforge/xstatic-angular-sanitize',
            'stackforge/xstatic-angular-smart-table',
            'stackforge/xstatic-bootstrap-datepicker',
            'stackforge/xstatic-bootstrap-scss',
            'stackforge/xstatic-d3',
            'stackforge/xstatic-font-awesome',
            'stackforge/xstatic-hogan',
            'stackforge/xstatic-jasmine',
            'stackforge/xstatic-jquery-migrate',
            'stackforge/xstatic-jquery.bootstrap.wizard',
            'stackforge/xstatic-jquery.quicksearch',
            'stackforge/xstatic-jsencrypt',
            'stackforge/xstatic-magic-search',
            'stackforge/xstatic-qunit',
            'stackforge/xstatic-rickshaw',
            'stackforge/xstatic-spin'
        ]
    }
}
        six.assertCountEqual(self, gotData, expectedData, "Check result for channels.yaml renames")