diff --git a/test/integration/targets/inventory_docker_swarm/aliases b/test/integration/targets/inventory_docker_swarm/aliases
new file mode 100644
index 00000000000..47a4e975b6a
--- /dev/null
+++ b/test/integration/targets/inventory_docker_swarm/aliases
@@ -0,0 +1,10 @@
+shippable/posix/group2
+skip/osx
+skip/freebsd
+destructive
+skip/docker  # The tests sometimes make docker daemon unstable; hence,
+             # we skip all docker-based CI runs to avoid disrupting
+             # the whole CI system. On VMs, we restart docker daemon
+             # after finishing the tests to minimize potential effects
+             # on other tests.
+needs/root
diff --git a/test/integration/targets/inventory_docker_swarm/inventory_1.docker_swarm.yml b/test/integration/targets/inventory_docker_swarm/inventory_1.docker_swarm.yml
new file mode 100644
index 00000000000..4ccbab6f62e
--- /dev/null
+++ b/test/integration/targets/inventory_docker_swarm/inventory_1.docker_swarm.yml
@@ -0,0 +1,3 @@
+---
+plugin: docker_swarm
+host: unix://var/run/docker.sock
diff --git a/test/integration/targets/inventory_docker_swarm/meta/main.yml b/test/integration/targets/inventory_docker_swarm/meta/main.yml
new file mode 100644
index 00000000000..07da8c6ddae
--- /dev/null
+++ b/test/integration/targets/inventory_docker_swarm/meta/main.yml
@@ -0,0 +1,3 @@
+---
+dependencies:
+  - setup_docker
diff --git a/test/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml b/test/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml
new file mode 100644
index 00000000000..85835b4f9dd
--- /dev/null
+++ b/test/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml
@@ -0,0 +1,9 @@
+---
+- hosts: 127.0.0.1
+  connection: local
+  gather_facts: no
+  tasks:
+    - name: Make sure swarm is removed
+      docker_swarm:
+        state: absent
+        force: yes
diff --git a/test/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml b/test/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml
new file mode 100644
index 00000000000..b171415bca2
--- /dev/null
+++ b/test/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml
@@ -0,0 +1,11 @@
+---
+- hosts: 127.0.0.1
+  connection: local
+  tasks:
+    - name: Setup docker
+      include_role:
+        name: ../../setup_docker
+    - name: Create a Swarm cluster
+      docker_swarm:
+        state: present
+        advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
diff --git a/test/integration/targets/inventory_docker_swarm/playbooks/test_inventory_1.yml b/test/integration/targets/inventory_docker_swarm/playbooks/test_inventory_1.yml
new file mode 100644
index 00000000000..9dd85fc2b3b
--- /dev/null
+++ b/test/integration/targets/inventory_docker_swarm/playbooks/test_inventory_1.yml
@@ -0,0 +1,34 @@
+---
+- hosts: all
+  connection: local  # otherwise Ansible will complain that it cannot connect via ssh to 127.0.0.1:22
+  tasks:
+    - name: Check for groups
+      assert:
+        that:
+          - "groups.manager | length > 0"
+          - "groups.worker | length >= 0"
+          - "groups.leader | length == 1"
+      run_once: yes
+
+    - name: List manager group
+      debug:
+        var: groups.manager
+      run_once: yes
+
+    - name: List worker group
+      debug:
+        var: groups.worker
+      run_once: yes
+
+    - name: List leader group
+      debug:
+        var: groups.leader
+      run_once: yes
+
+    - name: Print ansible_host per host
+      debug:
+        var: ansible_host
+
+    - name: Print docker_swarm_node_attributes per host
+      debug:
+        var: docker_swarm_node_attributes
diff --git a/test/integration/targets/inventory_docker_swarm/runme.sh b/test/integration/targets/inventory_docker_swarm/runme.sh
new file mode 100755
index 00000000000..3eb775a700c
--- /dev/null
+++ b/test/integration/targets/inventory_docker_swarm/runme.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+[[ -n "$DEBUG" || -n "$ANSIBLE_DEBUG" ]] && set -x
+
+set -euo pipefail
+
+cleanup() {
+    echo "Cleanup"
+    ansible-playbook playbooks/swarm_cleanup.yml
+    echo "Done"
+    exit 0
+}
+
+trap cleanup INT TERM EXIT
+
+echo "Setup"
+ansible-playbook playbooks/swarm_setup.yml
+
+echo "Test docker_swarm inventory 1"
+ansible-playbook -i inventory_1.docker_swarm.yml playbooks/test_inventory_1.yml