PageRenderTime 33ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/groovy/com/ceilfors/jenkins/plugins/jiratrigger/integration/JenkinsBlockingQueue.groovy

https://gitlab.com/CORP-RESELLER/jira-trigger-plugin
Groovy | 59 lines | 44 code | 11 blank | 4 comment | 0 complexity | fa09939651b6cab1824b588ddd5ee711 MD5 | raw file
  1. package com.ceilfors.jenkins.plugins.jiratrigger.integration
  2. import com.atlassian.jira.rest.client.api.domain.Issue
  3. import com.ceilfors.jenkins.plugins.jiratrigger.JiraTriggerExecutor
  4. import com.ceilfors.jenkins.plugins.jiratrigger.JiraTriggerListener
  5. import hudson.model.AbstractProject
  6. import hudson.model.Queue
  7. import jenkins.model.Jenkins
  8. import java.util.concurrent.ArrayBlockingQueue
  9. import java.util.concurrent.BlockingQueue
  10. import java.util.concurrent.CountDownLatch
  11. import java.util.concurrent.TimeUnit
  12. /**
  13. * @author ceilfors
  14. */
  15. class JenkinsBlockingQueue {
  16. private BlockingQueue scheduledItemBlockingQueue = new ArrayBlockingQueue<>(1)
  17. private CountDownLatch countDownLatch = new CountDownLatch(1)
  18. private long timeout = 5
  19. /** Can't extend from Queue.Item due to package access methods. */
  20. private class NullItem {}
  21. public JenkinsBlockingQueue(Jenkins jenkins) {
  22. def jiraTriggerExecutor = jenkins.getInjector().getInstance(JiraTriggerExecutor)
  23. jiraTriggerExecutor.addJiraTriggerListener(new JiraTriggerListener() {
  24. @Override
  25. void buildScheduled(Issue issue, Collection<? extends AbstractProject> projects) {
  26. scheduledItemBlockingQueue.offer(jenkins.queue.getItems().last(), timeout, TimeUnit.SECONDS)
  27. countDownLatch.countDown()
  28. }
  29. @Override
  30. void buildNotScheduled(Issue issue) {
  31. scheduledItemBlockingQueue.offer(new NullItem(), timeout, TimeUnit.SECONDS)
  32. countDownLatch.countDown()
  33. }
  34. });
  35. }
  36. void setTimeout(long timeout) {
  37. this.timeout = timeout
  38. }
  39. Queue.Item getScheduledItem() {
  40. def scheduledItem = scheduledItemBlockingQueue.poll(timeout, TimeUnit.SECONDS)
  41. return scheduledItem instanceof NullItem ? null : scheduledItem as Queue.Item
  42. }
  43. boolean isItemScheduled() {
  44. countDownLatch.await(timeout, TimeUnit.SECONDS)
  45. def scheduledItem = scheduledItemBlockingQueue.peek()
  46. return scheduledItem instanceof NullItem ? null : scheduledItem as Queue.Item
  47. }
  48. }