e392f0bd48
We *know* that requirements will have a stable/train branch soon; make sure clients don't go caching the redirect to master. Change-Id: I8507d86e4f553b698163be61665267d42e033d91 Related-Change: Ia2e8c46c27ac97217576afdd1677efba4b99fc37
187 lines
6.5 KiB
Python
187 lines
6.5 KiB
Python
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import textwrap
|
|
|
|
from oslotest import base
|
|
|
|
from openstack_releases._redirections import generate_constraints_redirections
|
|
from openstack_releases import deliverable
|
|
from openstack_releases import yamlutils
|
|
|
|
|
|
# Create a Fake Deliverables class we really only need an object with
|
|
# get_deliverable_history that returns an iterable. Using the main real class
|
|
# seems like overkill and would subject us to testing chnages as the actual
|
|
# deliverables change over time.
|
|
class FakeDeliverables(object):
|
|
def __init__(self, deliverables=[]):
|
|
self._deliverables = deliverables
|
|
|
|
def get_deliverable_history(self, name):
|
|
return self._deliverables
|
|
|
|
|
|
class TestRedirections(base.BaseTestCase):
|
|
# Deliverable that looks like an open development series with no branches
|
|
# or releases.
|
|
OPEN_DEVELOPMENT = deliverable.Deliverable(
|
|
team='requirements',
|
|
series='stein',
|
|
name='requirements',
|
|
data={}
|
|
)
|
|
# Deliverable that looks like an open development series with no branches
|
|
# but has a single release
|
|
DEVELOPMENT_RELEASE = deliverable.Deliverable(
|
|
team='requirements',
|
|
series='stein',
|
|
name='requirements',
|
|
data=yamlutils.loads(textwrap.dedent('''
|
|
releases:
|
|
- projects:
|
|
- hash: not_used
|
|
repo: openstack/requirements
|
|
version: 1.0.0
|
|
'''))
|
|
)
|
|
# Deliverable that looks like an open stable series with no releases
|
|
OPEN_STABLE = deliverable.Deliverable(
|
|
team='requirements',
|
|
series='rocky',
|
|
name='requirements',
|
|
data=yamlutils.loads(textwrap.dedent('''
|
|
branches:
|
|
- name: stable/rocky
|
|
location:
|
|
openstack/requirements: not_used
|
|
'''))
|
|
)
|
|
# Deliverable that looks like an open stable series with no releases but
|
|
# also has an open 'feature' branch
|
|
OPEN_UNSTABLE = deliverable.Deliverable(
|
|
team='requirements',
|
|
series='rocky',
|
|
name='requirements',
|
|
data=yamlutils.loads(textwrap.dedent('''
|
|
branches:
|
|
- name: unstable/rocky
|
|
location:
|
|
openstack/requirements: not_used
|
|
- name: stable/rocky
|
|
location:
|
|
openstack/requirements: not_used
|
|
'''))
|
|
)
|
|
# Deliverable that looks like an open stable series with a release
|
|
STABLE_RELEASE = deliverable.Deliverable(
|
|
team='requirements',
|
|
series='rocky',
|
|
name='requirements',
|
|
data=yamlutils.loads(textwrap.dedent('''
|
|
branches:
|
|
- name: stable/rocky
|
|
location:
|
|
openstack/requirements: not_used
|
|
releases:
|
|
- projects:
|
|
- hash: not_used
|
|
repo: openstack/requirements
|
|
version: 1.0.0
|
|
'''))
|
|
)
|
|
# Deliverable that looks like a closed stable series
|
|
STABLE_EOL = deliverable.Deliverable(
|
|
team='requirements',
|
|
series='mitaka',
|
|
name='requirements',
|
|
data=yamlutils.loads(textwrap.dedent('''
|
|
releases:
|
|
- projects:
|
|
- hash: not_used
|
|
repo: openstack/requirements
|
|
version: mitaka-eol
|
|
'''))
|
|
)
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
|
|
def test_open_development(self):
|
|
deliverables = FakeDeliverables([
|
|
self.OPEN_DEVELOPMENT,
|
|
])
|
|
self.assertEqual([dict(code=302, src='stein', ref_type='branch',
|
|
dst='master')],
|
|
generate_constraints_redirections(deliverables))
|
|
|
|
def test_development_release(self):
|
|
deliverables = FakeDeliverables([
|
|
self.DEVELOPMENT_RELEASE,
|
|
])
|
|
self.assertEqual([dict(code=302, src='stein', ref_type='branch',
|
|
dst='master')],
|
|
generate_constraints_redirections(deliverables))
|
|
|
|
def test_open_stable(self):
|
|
deliverables = FakeDeliverables([
|
|
self.OPEN_STABLE,
|
|
])
|
|
self.assertEqual([dict(code=301, src='rocky', ref_type='branch',
|
|
dst='stable/rocky')],
|
|
generate_constraints_redirections(deliverables))
|
|
|
|
def test_open_unstable(self):
|
|
deliverables = FakeDeliverables([
|
|
self.OPEN_UNSTABLE,
|
|
])
|
|
self.assertEqual([dict(code=301, src='rocky', ref_type='branch',
|
|
dst='stable/rocky')],
|
|
generate_constraints_redirections(deliverables))
|
|
|
|
def test_stable_release(self):
|
|
deliverables = FakeDeliverables([
|
|
self.STABLE_RELEASE,
|
|
])
|
|
self.assertEqual([dict(code=301, src='rocky', ref_type='branch',
|
|
dst='stable/rocky')],
|
|
generate_constraints_redirections(deliverables))
|
|
|
|
def test_stable_eol(self):
|
|
deliverables = FakeDeliverables([
|
|
self.STABLE_EOL,
|
|
])
|
|
self.assertEqual([dict(code=301, src='mitaka', ref_type='tag',
|
|
dst='mitaka-eol')],
|
|
generate_constraints_redirections(deliverables))
|
|
|
|
def test_all(self):
|
|
deliverables = FakeDeliverables([
|
|
self.STABLE_EOL,
|
|
self.STABLE_RELEASE,
|
|
self.DEVELOPMENT_RELEASE,
|
|
])
|
|
self.assertEqual([dict(code=302, src='stein', ref_type='branch',
|
|
dst='master'),
|
|
dict(code=301, src='rocky', ref_type='branch',
|
|
dst='stable/rocky'),
|
|
dict(code=301, src='mitaka', ref_type='tag',
|
|
dst='mitaka-eol')],
|
|
generate_constraints_redirections(deliverables))
|
|
|
|
def test_empty(self):
|
|
deliverables = FakeDeliverables([])
|
|
self.assertEqual([],
|
|
generate_constraints_redirections(deliverables))
|