diff --git a/.fmf/version b/.fmf/version
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/.fmf/version
@@ -0,0 +1 @@
+1
diff --git a/.gitignore b/.gitignore
index e69de29..cc6365c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,11 @@
+/3.2.1.tar.gz
+/3.3.2.tar.gz
+/disruptor-3.3.2.pom
+/disruptor-3.3.4.pom
+/3.3.4.tar.gz
+/disruptor-3.3.6.tar.gz
+/disruptor-3.3.6.pom
+/disruptor-3.4.2.pom
+/disruptor-3.4.2.tar.gz
+/disruptor-3.4.4.tar.gz
+/disruptor-3.4.4.pom
diff --git a/ci.fmf b/ci.fmf
new file mode 100644
index 0000000..c5aa0e0
--- /dev/null
+++ b/ci.fmf
@@ -0,0 +1 @@
+resultsdb-testcase: separate
diff --git a/disruptor-3.3.2-jmock.patch b/disruptor-3.3.2-jmock.patch
new file mode 100644
index 0000000..2f4797e
--- /dev/null
+++ b/disruptor-3.3.2-jmock.patch
@@ -0,0 +1,21 @@
+--- disruptor-3.3.2/src/test/java/com/lmax/disruptor/BatchEventProcessorTest.java 2015-02-25 10:09:57.000000000 +0100
++++ disruptor-3.3.2/src/test/java/com/lmax/disruptor/BatchEventProcessorTest.java.jmock 2015-06-03 15:52:43.997446568 +0200
+@@ -23,6 +23,7 @@
+ import org.jmock.api.Action;
+ import org.jmock.api.Invocation;
+ import org.jmock.integration.junit4.JMock;
++import org.jmock.lib.concurrent.Synchroniser;
+ import org.junit.Test;
+ import org.junit.runner.RunWith;
+
+@@ -35,7 +36,9 @@
+ @RunWith(JMock.class)
+ public final class BatchEventProcessorTest
+ {
+- private final Mockery context = new Mockery();
++ private final Mockery context = new Mockery() {{
++ setThreadingPolicy(new Synchroniser());
++ }};
+ private final Sequence lifecycleSequence = context.sequence("lifecycleSequence");
+ private final CountDownLatch latch = new CountDownLatch(1);
+
diff --git a/disruptor.spec b/disruptor.spec
new file mode 100644
index 0000000..a14dd6f
--- /dev/null
+++ b/disruptor.spec
@@ -0,0 +1,192 @@
+%bcond_with bootstrap
+
+Name: disruptor
+Version: 3.4.4
+Release: 26%{?dist}
+Summary: Concurrent Programming Framework
+License: Apache-2.0
+URL: https://lmax-exchange.github.io/disruptor/
+BuildArch: noarch
+ExclusiveArch: %{java_arches} noarch
+
+Source0: https://github.com/LMAX-Exchange/disruptor/archive/%{version}/%{name}-%{version}.tar.gz
+Source1: https://repo1.maven.org/maven2/com/lmax/%{name}/%{version}/%{name}-%{version}.pom
+
+%if %{with bootstrap}
+BuildRequires: javapackages-bootstrap
+%else
+BuildRequires: maven-local
+BuildRequires: mvn(junit:junit)
+BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
+%endif
+
+%description
+A High Performance Inter-Thread Messaging Library.
+
+%package javadoc
+Summary: API documentation for %{name}
+
+%description javadoc
+API documentation for %{name}.
+
+%prep
+%autosetup -p1
+# Cleanup
+find . -name "*.class" -print -delete
+find . -name "*.jar" -type f -print -delete
+
+cp -p %{SOURCE1} pom.xml
+
+# Add OSGi support
+%pom_xpath_inject "pom:project" "bundle"
+%pom_add_plugin org.apache.felix:maven-bundle-plugin:2.3.7 . '
+true
+
+
+ %{url}
+ ${project.name}
+ LMAX Disruptor Development Team
+
+
+
+
+ bundle-manifest
+ process-classes
+
+ manifest
+
+
+'
+
+# fail to compile cause: incompatible hamcrest apis
+rm -r src/test/java/com/lmax/disruptor/RingBufferTest.java \
+ src/test/java/com/lmax/disruptor/RingBufferEventMatcher.java
+# Failed to stop thread: Thread[com.lmax.disruptor.BatchEventProcessor@1d057a39,5,main]
+rm -r src/test/java/com/lmax/disruptor/dsl/DisruptorTest.java
+# Test fails due to incompatible jmock version
+#rm -f src/test/java/com/lmax/disruptor/EventPollerTest.java
+
+%mvn_file :%{name} %{name}
+
+%build
+
+%mvn_build -- -Dproject.build.sourceEncoding=UTF-8 -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8
+
+%install
+%mvn_install
+
+%files -f .mfiles
+%doc README.md
+%license LICENCE.txt
+
+%files javadoc -f .mfiles-javadoc
+%license LICENCE.txt
+
+%changelog
+* Fri Nov 29 2024 Mikolaj Izdebski - 3.4.4-24
+- Update javapackages test plan to f42
+
+* Wed Jul 17 2024 Fedora Release Engineering - 3.4.4-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
+
+* Tue Feb 27 2024 Jiri Vanek - 3.4.4-11
+- Rebuilt for java-21-openjdk as system jdk
+
+* Fri Feb 23 2024 Jiri Vanek - 3.4.4-10
+- bump of release for for java-21-openjdk as system jdk
+
+* Wed Jan 24 2024 Fedora Release Engineering - 3.4.4-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Jan 19 2024 Fedora Release Engineering - 3.4.4-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Sep 01 2023 Mikolaj Izdebski - 3.4.4-7
+- Convert License tag to SPDX format
+
+* Wed Jul 19 2023 Fedora Release Engineering - 3.4.4-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Thu Jan 19 2023 Fedora Release Engineering - 3.4.4-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Thu Jul 21 2022 Fedora Release Engineering - 3.4.4-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Sat Feb 05 2022 Jiri Vanek - 3.4.4-3
+- Rebuilt for java-17-openjdk as system jdk
+
+* Thu Jan 20 2022 Fedora Release Engineering - 3.4.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Mon Dec 13 2021 Sérgio Basto - 3.4.4-1
+- Update disruptor to 3.4.4 (#1953941)
+
+* Wed Jul 21 2021 Fedora Release Engineering - 3.4.2-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Mon Jun 28 2021 Mikolaj Izdebski - 3.4.2-5
+- Remove unneeded buildrequires on jmock and hamcrest
+
+* Tue Jan 26 2021 Fedora Release Engineering - 3.4.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering - 3.4.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Jul 10 2020 Jiri Vanek - 3.4.2-2
+- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11
+
+* Tue May 12 2020 Alexander Scheel - 3.4.2-1
+- Rebase to disruptor upstream release v3.4.2
+
+* Tue Jan 28 2020 Fedora Release Engineering - 3.3.6-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Wed Jul 24 2019 Fedora Release Engineering - 3.3.6-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Thu Jan 31 2019 Fedora Release Engineering - 3.3.6-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Thu Jul 12 2018 Fedora Release Engineering - 3.3.6-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Wed Feb 07 2018 Fedora Release Engineering - 3.3.6-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering - 3.3.6-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Fri Feb 10 2017 Fedora Release Engineering - 3.3.6-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Fri Nov 11 2016 gil cattaneo 3.3.6-1
+- update to 3.3.6
+
+* Thu Jun 23 2016 gil cattaneo 3.3.4-1
+- update to 3.3.4
+
+* Wed Feb 03 2016 Fedora Release Engineering - 3.3.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Wed Jun 17 2015 Fedora Release Engineering - 3.3.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Jun 03 2015 gil cattaneo 3.3.2-2
+- build fix for jmock 2.8.1
+
+* Wed Jun 3 2015 Mikolaj Izdebski - 3.3.2-1
+- Update to upstream version 3.3.2
+
+* Sun Feb 01 2015 gil cattaneo 3.2.1-3
+- introduce license macro
+
+* Sat Jun 07 2014 Fedora Release Engineering - 3.2.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Mon Apr 21 2014 gil cattaneo 3.2.1-1
+- update to 3.2.1
+
+* Wed Aug 14 2013 gil cattaneo 3.2.0-1
+- initial rpm
diff --git a/gating.yaml b/gating.yaml
new file mode 100644
index 0000000..7f72400
--- /dev/null
+++ b/gating.yaml
@@ -0,0 +1,8 @@
+--- !Policy
+product_versions:
+ - rhel-9
+decision_contexts:
+ - osci_compose_gate
+rules:
+ - !PassingTestCaseRule {test_case_name: osci.brew-build./plans/smoke.functional}
+ - !PassingTestCaseRule {test_case_name: osci.brew-build./plans/javapackages.functional}
diff --git a/plans/javapackages.fmf b/plans/javapackages.fmf
new file mode 100644
index 0000000..8ba3510
--- /dev/null
+++ b/plans/javapackages.fmf
@@ -0,0 +1,7 @@
+summary: Run javapackages-specific tests
+discover:
+ how: fmf
+ url: https://src.fedoraproject.org/tests/javapackages
+ ref: c9s
+execute:
+ how: tmt
diff --git a/plans/smoke.fmf b/plans/smoke.fmf
new file mode 100644
index 0000000..a1e7bfd
--- /dev/null
+++ b/plans/smoke.fmf
@@ -0,0 +1,5 @@
+summary: Basic smoke test
+discover:
+ how: fmf
+execute:
+ how: tmt
diff --git a/sources b/sources
new file mode 100644
index 0000000..3f31734
--- /dev/null
+++ b/sources
@@ -0,0 +1,2 @@
+SHA512 (disruptor-3.4.4.tar.gz) = 871d474ecbc4e09d33b0d099232f2abdf88b755141e00406e4a721e5bd6c5edc99c6c446277e054bd603ae9b158bdb6b438aa6e8532194dca9bce953b748bfde
+SHA512 (disruptor-3.4.4.pom) = 32c4ce4267c8dac44803949e68298fabfc399e1ff170a630b531aca2d87b8ec8fdb9a3f379005c512e94c9cfaa25f15bc421023d211c6c6d8ceb3eee1b61ce0d
diff --git a/tests/Sanity/smoke/Smoke.java b/tests/Sanity/smoke/Smoke.java
new file mode 100644
index 0000000..64fa8f7
--- /dev/null
+++ b/tests/Sanity/smoke/Smoke.java
@@ -0,0 +1,51 @@
+import com.lmax.disruptor.dsl.Disruptor;
+import com.lmax.disruptor.EventFactory;
+import com.lmax.disruptor.RingBuffer;
+import com.lmax.disruptor.util.DaemonThreadFactory;
+import java.nio.ByteBuffer;
+
+class LongEvent
+{
+ private long value;
+
+ public void set(long value)
+ {
+ this.value = value;
+ }
+}
+
+class LongEventFactory implements EventFactory
+{
+ public LongEvent newInstance()
+ {
+ return new LongEvent();
+ }
+}
+
+public class Smoke
+{
+ public static void main(String[] args) throws Exception
+ {
+ System.out.println("SMOKE TEST START");
+
+ int bufferSize = 1024;
+
+ Disruptor disruptor =
+ new Disruptor<>(LongEvent::new, bufferSize, DaemonThreadFactory.INSTANCE);
+
+ disruptor.handleEventsWith((event, sequence, endOfBatch) ->
+ System.out.println("Event: " + event));
+ disruptor.start();
+
+ RingBuffer ringBuffer = disruptor.getRingBuffer();
+ ByteBuffer bb = ByteBuffer.allocate(8);
+ for (long l = 0; l < 10; l++)
+ {
+ bb.putLong(0, l);
+ ringBuffer.publishEvent((event, sequence, buffer) -> event.set(buffer.getLong(0)), bb);
+ Thread.sleep(100);
+ }
+
+ System.out.println("SMOKE TEST COMPLETE");
+ }
+}
diff --git a/tests/Sanity/smoke/main.fmf b/tests/Sanity/smoke/main.fmf
new file mode 100644
index 0000000..a551c7f
--- /dev/null
+++ b/tests/Sanity/smoke/main.fmf
@@ -0,0 +1,6 @@
+summary: disruptor smoke test
+description: |
+ Test basic functionality of disruptor.
+require:
+ - disruptor
+ - java-21-openjdk-devel
diff --git a/tests/Sanity/smoke/runtest.sh b/tests/Sanity/smoke/runtest.sh
new file mode 100755
index 0000000..8116d4e
--- /dev/null
+++ b/tests/Sanity/smoke/runtest.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# Author: Mikolaj Izdebski
+. /usr/share/beakerlib/beakerlib.sh
+
+rlJournalStart
+
+ rlPhaseStartTest "log events"
+ rlAssertRpm disruptor
+ java_home=/usr/lib/jvm/java-21-openjdk/bin
+ jar=/usr/share/java/disruptor.jar
+ rlRun "${java_home}/javac -cp ${jar} -d bin Smoke.java"
+ rlRun -s "${java_home}/java -cp ${jar}:bin Smoke"
+ rlAssertGrep "Event: LongEvent" $rlRun_LOG
+ rlAssertGrep "SMOKE TEST COMPLETE" $rlRun_LOG
+ rlPhaseEnd
+
+rlJournalEnd
+rlJournalPrintText
diff --git a/tests/main.fmf b/tests/main.fmf
new file mode 100644
index 0000000..99fd67e
--- /dev/null
+++ b/tests/main.fmf
@@ -0,0 +1,4 @@
+contact: Mikolaj Izdebski
+framework: beakerlib
+test: ./runtest.sh
+tier: 0