summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames E. Blair <jim@acmegating.com>2023-02-10 15:01:28 -0800
committerJames E. Blair <jim@acmegating.com>2023-02-10 15:01:28 -0800
commitc3334743f6424eee40eab4632b6b5c7654cc17f9 (patch)
tree1e24bf6f498f15649a730afd5e9898d15cde3a6f
parent58dbb7ae1a364ad18856a38b6f2787f13419caf1 (diff)
downloadzuul-c3334743f6424eee40eab4632b6b5c7654cc17f9.tar.gz
Fix race in test_queue unit tests
These tests call getChangeQueue which mutates the pipeline state objects in ZK. They should therefore hold the pipeline lock while doing this. Otherwise, cleanup routines may run during the test and delete the state out from under them. Change-Id: If85d3cf66669f5786203309294528e1f528b0423
-rw-r--r--tests/unit/test_scheduler.py37
1 files changed, 26 insertions, 11 deletions
diff --git a/tests/unit/test_scheduler.py b/tests/unit/test_scheduler.py
index 35e632d46..80eddfc4a 100644
--- a/tests/unit/test_scheduler.py
+++ b/tests/unit/test_scheduler.py
@@ -54,7 +54,7 @@ from tests.base import (
from zuul.zk.change_cache import ChangeKey
from zuul.zk.event_queues import PIPELINE_NAME_ROOT
from zuul.zk.layout import LayoutState
-from zuul.zk.locks import management_queue_lock
+from zuul.zk.locks import management_queue_lock, pipeline_lock
from zuul.zk import zkobject
EMPTY_LAYOUT_STATE = LayoutState("", "", 0, None, {}, -1)
@@ -3587,8 +3587,11 @@ class TestScheduler(ZuulTestCase):
FakeChange = namedtuple('FakeChange', ['project', 'branch'])
fake_a = FakeChange(project1, 'master')
fake_b = FakeChange(project2, 'master')
- with self.createZKContext() as ctx,\
- gate.manager.currentContext(ctx):
+ with pipeline_lock(
+ self.zk_client, tenant.name,
+ gate.name) as lock,\
+ self.createZKContext(lock) as ctx,\
+ gate.manager.currentContext(ctx):
gate.manager.getChangeQueue(fake_a, None)
gate.manager.getChangeQueue(fake_b, None)
q1 = gate.getQueue(project1.canonical_name, None)
@@ -3610,8 +3613,11 @@ class TestScheduler(ZuulTestCase):
FakeChange = namedtuple('FakeChange', ['project', 'branch'])
fake_a = FakeChange(project1, 'master')
fake_b = FakeChange(project2, 'master')
- with self.createZKContext() as ctx,\
- gate.manager.currentContext(ctx):
+ with pipeline_lock(
+ self.zk_client, tenant.name,
+ gate.name) as lock,\
+ self.createZKContext(lock) as ctx,\
+ gate.manager.currentContext(ctx):
gate.manager.getChangeQueue(fake_a, None)
gate.manager.getChangeQueue(fake_b, None)
q1 = gate.getQueue(project1.canonical_name, None)
@@ -3633,8 +3639,11 @@ class TestScheduler(ZuulTestCase):
FakeChange = namedtuple('FakeChange', ['project', 'branch'])
fake_a = FakeChange(project1, 'master')
fake_b = FakeChange(project2, 'master')
- with self.createZKContext() as ctx,\
- gate.manager.currentContext(ctx):
+ with pipeline_lock(
+ self.zk_client, tenant.name,
+ gate.name) as lock,\
+ self.createZKContext(lock) as ctx,\
+ gate.manager.currentContext(ctx):
gate.manager.getChangeQueue(fake_a, None)
gate.manager.getChangeQueue(fake_b, None)
q1 = gate.getQueue(project1.canonical_name, None)
@@ -3655,8 +3664,11 @@ class TestScheduler(ZuulTestCase):
FakeChange = namedtuple('FakeChange', ['project', 'branch'])
fake_a = FakeChange(project1, 'master')
fake_b = FakeChange(project2, 'master')
- with self.createZKContext() as ctx,\
- gate.manager.currentContext(ctx):
+ with pipeline_lock(
+ self.zk_client, tenant.name,
+ gate.name) as lock,\
+ self.createZKContext(lock) as ctx,\
+ gate.manager.currentContext(ctx):
gate.manager.getChangeQueue(fake_a, None)
gate.manager.getChangeQueue(fake_b, None)
q1 = gate.getQueue(project1.canonical_name, None)
@@ -3678,8 +3690,11 @@ class TestScheduler(ZuulTestCase):
FakeChange = namedtuple('FakeChange', ['project', 'branch'])
fake_a = FakeChange(project1, 'master')
fake_b = FakeChange(project2, 'master')
- with self.createZKContext() as ctx,\
- gate.manager.currentContext(ctx):
+ with pipeline_lock(
+ self.zk_client, tenant.name,
+ gate.name) as lock,\
+ self.createZKContext(lock) as ctx,\
+ gate.manager.currentContext(ctx):
gate.manager.getChangeQueue(fake_a, None)
gate.manager.getChangeQueue(fake_b, None)
q1 = gate.getQueue(project1.canonical_name, None)