From 6a2aa3b8adaf9dd220916e42ec65904820d64092 Mon Sep 17 00:00:00 2001
From: "Bradley A. Thornton" <bthornto@thethorntons.net>
Date: Fri, 16 Aug 2019 11:45:39 -0700
Subject: based on ansible/ansible e7a8e4805349aec2d8a9538f544ad9e29b2e6318

---
 .../targets/prepare_vyos_tests/tasks/main.yaml     |   5 +-
 .../vyos_command/tests/cli/cli_command.yaml        |   6 +-
 .../vyos_config/tests/cli_config/cli_backup.yaml   |   8 +-
 .../vyos_config/tests/cli_config/cli_basic.yaml    |   8 +-
 .../vyos_config/tests/cli_config/cli_comment.yaml  |   6 +-
 .../vyos_interfaces/tests/cli/_populate.yaml       |   2 +-
 .../vyos_interfaces/tests/cli/_remove_config.yaml  |   2 +-
 .../targets/vyos_interfaces/vars/main.yaml         |  21 ----
 .../vyos_l3_interfaces/tests/cli/_populate.yaml    |   2 +-
 .../tests/cli/_remove_config.yaml                  |   2 +-
 .../targets/vyos_lag_interfaces/defaults/main.yaml |   3 +
 .../targets/vyos_lag_interfaces/meta/main.yaml     |   2 +
 .../targets/vyos_lag_interfaces/tasks/cli.yaml     |  19 ++++
 .../targets/vyos_lag_interfaces/tasks/main.yaml    |   2 +
 .../vyos_lag_interfaces/tests/cli/_add_bond.yaml   |   8 ++
 .../vyos_lag_interfaces/tests/cli/_populate.yaml   |  16 +++
 .../tests/cli/_remove_bond.yaml                    |   8 ++
 .../tests/cli/_remove_config.yaml                  |  14 +++
 .../vyos_lag_interfaces/tests/cli/deleted.yaml     |  46 +++++++++
 .../vyos_lag_interfaces/tests/cli/merged.yaml      |  60 +++++++++++
 .../vyos_lag_interfaces/tests/cli/overridden.yaml  |  54 ++++++++++
 .../vyos_lag_interfaces/tests/cli/replaced.yaml    |  51 +++++++++
 .../targets/vyos_lag_interfaces/tests/cli/rtt.yaml |  69 +++++++++++++
 .../targets/vyos_lag_interfaces/vars/main.yaml     | 115 +++++++++++++++++++++
 24 files changed, 488 insertions(+), 41 deletions(-)
 create mode 100644 test/integration/targets/vyos_lag_interfaces/defaults/main.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/meta/main.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tasks/cli.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tasks/main.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml
 create mode 100644 test/integration/targets/vyos_lag_interfaces/vars/main.yaml

(limited to 'test')

diff --git a/test/integration/targets/prepare_vyos_tests/tasks/main.yaml b/test/integration/targets/prepare_vyos_tests/tasks/main.yaml
index 494a1d26..a156ea47 100644
--- a/test/integration/targets/prepare_vyos_tests/tasks/main.yaml
+++ b/test/integration/targets/prepare_vyos_tests/tasks/main.yaml
@@ -1,10 +1,11 @@
 ---
 - name: Ensure required interfaces are present in running-config
-  cli_config:
+  network.cli.cli_config:
     config: "{{ lines }}"
   vars:
     lines: |
       set interfaces ethernet eth0 address dhcp
       set interfaces ethernet eth1
       set interfaces ethernet eth2
-      set interfaces loopback lo
+      delete interfaces loopback lo
+  ignore_errors: yes
diff --git a/test/integration/targets/vyos_command/tests/cli/cli_command.yaml b/test/integration/targets/vyos_command/tests/cli/cli_command.yaml
index caeb2021..08a7675b 100644
--- a/test/integration/targets/vyos_command/tests/cli/cli_command.yaml
+++ b/test/integration/targets/vyos_command/tests/cli/cli_command.yaml
@@ -4,7 +4,7 @@
 
 - block:
   - name: get output for single command
-    cli_command:
+    network.cli.cli_command:
       command: show version
     register: result
 
@@ -14,7 +14,7 @@
         - "result.stdout is defined"
 
   - name: send invalid command
-    cli_command:
+    network.cli.cli_command:
       command: 'show foo'
     register: result
     ignore_errors: yes
@@ -27,7 +27,7 @@
 
 - block:
   - name: test failure for local connection
-    cli_command:
+    network.cli.cli_command:
       command: show version
     register: result
     ignore_errors: yes
diff --git a/test/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml b/test/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml
index a431c01f..80577059 100644
--- a/test/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml
+++ b/test/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml
@@ -22,7 +22,7 @@
   with_items: "{{backup_files.files|default([])}}"
 
 - name: take config backup
-  cli_config:
+  network.cli.cli_config:
     backup: yes
   become: yes
   register: result
@@ -43,7 +43,7 @@
       - "backup_files.files is defined"
 
 - name: take configuration backup in custom filename and directory path
-  cli_config:
+  network.cli.cli_config:
     backup: yes
     backup_options:
       filename: backup.cfg
@@ -66,7 +66,7 @@
       - "backup_file.files is defined"
 
 - name: take configuration backup in custom filename
-  cli_config:
+  network.cli.cli_config:
     backup: yes
     backup_options:
       filename: backup.cfg
@@ -88,7 +88,7 @@
       - "backup_file.files is defined"
 
 - name: take configuration backup in custom path and default filename
-  cli_config:
+  network.cli.cli_config:
     backup: yes
     backup_options:
       dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"
diff --git a/test/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml b/test/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml
index e83db1ea..e5e3edb1 100644
--- a/test/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml
+++ b/test/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml
@@ -2,11 +2,11 @@
 - debug: msg="START cli_config/cli_basic.yaml on connection={{ ansible_connection }}"
 
 - name: setup - remove interface description
-  cli_config: &rm
+  network.cli.cli_config: &rm
     config: delete interfaces loopback lo description
 
 - name: configure device with config
-  cli_config: &conf
+  network.cli.cli_config: &conf
     config: set interfaces loopback lo description 'this is a test'
   register: result
 
@@ -15,7 +15,7 @@
       - "result.changed == true"
 
 - name: Idempotence
-  cli_config: *conf
+  network.cli.cli_config: *conf
   register: result
 
 - assert:
@@ -23,6 +23,6 @@
       - "result.changed == false"
 
 - name: teardown
-  cli_config: *rm
+  network.cli.cli_config: *rm
 
 - debug: msg="END cli_config/cli_basic.yaml on connection={{ ansible_connection }}"
diff --git a/test/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml b/test/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml
index 4f9a048d..ecc9e8c9 100644
--- a/test/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml
+++ b/test/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml
@@ -2,11 +2,11 @@
 - debug: msg="START cli_config/cli_comment.yaml on connection={{ ansible_connection }}"
 
 - name: setup
-  cli_config: &rm
+  network.cli.cli_config: &rm
     config: set system host-name {{ inventory_hostname_short }}
 
 - name: configure using comment
-  cli_config:
+  network.cli.cli_config:
     config: set system host-name foo
     commit_comment: this is a test
   register: result
@@ -25,6 +25,6 @@
       - "'this is a test' in result.stdout_lines[0][1]"
 
 - name: teardown
-  cli_config: *rm
+  network.cli.cli_config: *rm
 
 - debug: msg="END cli_config/cli_comment.yaml on connection={{ ansible_connection }}"
diff --git a/test/integration/targets/vyos_interfaces/tests/cli/_populate.yaml b/test/integration/targets/vyos_interfaces/tests/cli/_populate.yaml
index b798bae0..0a44fa45 100644
--- a/test/integration/targets/vyos_interfaces/tests/cli/_populate.yaml
+++ b/test/integration/targets/vyos_interfaces/tests/cli/_populate.yaml
@@ -1,6 +1,6 @@
 ---
 - name: Setup
-  cli_config:
+  network.cli.cli_config:
     config: "{{ lines }}"
   vars:
     lines: |
diff --git a/test/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml b/test/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml
index 6d559c15..ce4723df 100644
--- a/test/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml
+++ b/test/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml
@@ -1,6 +1,6 @@
 ---
 - name: Remove Config
-  cli_config:
+  network.cli.cli_config:
     config: "{{ lines }}"
   vars:
     lines: |
diff --git a/test/integration/targets/vyos_interfaces/vars/main.yaml b/test/integration/targets/vyos_interfaces/vars/main.yaml
index e3bd8188..b9737522 100644
--- a/test/integration/targets/vyos_interfaces/vars/main.yaml
+++ b/test/integration/targets/vyos_interfaces/vars/main.yaml
@@ -12,9 +12,6 @@ merged:
     - name: "eth2"
       enabled: true
 
-    - name: "lo"
-      enabled: true
-
   commands:
     - "set interfaces ethernet eth1 description 'Configured by Ansible - Interface 1'"
     - "set interfaces ethernet eth1 mtu '1500'"
@@ -28,9 +25,6 @@ merged:
     - "set interfaces ethernet eth2 disable"
 
   after:
-    - name: "lo"
-      enabled: true
-
     - name: "eth0"
       enabled: true
       duplex: "auto"
@@ -85,9 +79,6 @@ populate:
     duplex: "auto"
     speed: "auto"
 
-  - name: "lo"
-    enabled: true
-
 replaced:
   commands:
     - "delete interfaces ethernet eth1 mtu"
@@ -103,9 +94,6 @@ replaced:
     - "set interfaces ethernet eth2 mtu '1400'"
 
   after:
-    - name: "lo"
-      enabled: true
-
     - name: "eth1"
       description: "Replaced by Ansible"
       enabled: true
@@ -144,9 +132,6 @@ overridden:
     - "set interfaces ethernet eth2 mtu '1200'"
 
   after:
-    - name: "lo"
-      enabled: true
-
     - name: "eth0"
       enabled: true
       speed: "auto"
@@ -180,9 +165,6 @@ deleted:
     - "delete interfaces ethernet eth2 vif 200 description"
 
   after:
-    - name: "lo"
-      enabled: true
-
     - name: "eth0"
       enabled: true
       speed: "auto"
@@ -202,9 +184,6 @@ deleted:
 
 round_trip:
   after:
-    - name: "lo"
-      enabled: true
-
     - name: "eth0"
       enabled: true
       speed: "auto"
diff --git a/test/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml b/test/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml
index 248a9bb8..fc0bbb24 100644
--- a/test/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml
+++ b/test/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml
@@ -1,6 +1,6 @@
 ---
 - name: Setup
-  cli_config:
+  network.cli.cli_config:
     config: "{{ lines }}"
   vars:
     lines: |
diff --git a/test/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml b/test/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml
index 31af5ba9..95b2b8cc 100644
--- a/test/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml
+++ b/test/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml
@@ -1,6 +1,6 @@
 ---
 - name: Remove Config
-  cli_config:
+  network.cli.cli_config:
     config: "{{ lines }}"
   vars:
     lines: |
diff --git a/test/integration/targets/vyos_lag_interfaces/defaults/main.yaml b/test/integration/targets/vyos_lag_interfaces/defaults/main.yaml
new file mode 100644
index 00000000..164afead
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "[^_].*"
+test_items: []
diff --git a/test/integration/targets/vyos_lag_interfaces/meta/main.yaml b/test/integration/targets/vyos_lag_interfaces/meta/main.yaml
new file mode 100644
index 00000000..f88bce55
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/meta/main.yaml
@@ -0,0 +1,2 @@
+dependencies:
+  - prepare_vyos_tests
diff --git a/test/integration/targets/vyos_lag_interfaces/tasks/cli.yaml b/test/integration/targets/vyos_lag_interfaces/tasks/cli.yaml
new file mode 100644
index 00000000..655e51ee
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tasks/cli.yaml
@@ -0,0 +1,19 @@
+---
+- name: Collect all cli test cases
+  find:
+    paths: "{{ role_path }}/tests/cli"
+    patterns: "{{ testcase }}.yaml"
+    use_regex: true
+  register: test_cases
+  delegate_to: localhost
+
+- name: Set test_items
+  set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: Run test case (connection=network_cli)
+  include: "{{ test_case_to_run }}"
+  vars:
+    ansible_connection: network_cli
+  with_items: "{{ test_items }}"
+  loop_control:
+    loop_var: test_case_to_run
diff --git a/test/integration/targets/vyos_lag_interfaces/tasks/main.yaml b/test/integration/targets/vyos_lag_interfaces/tasks/main.yaml
new file mode 100644
index 00000000..415c99d8
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml
new file mode 100644
index 00000000..c479f797
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml
@@ -0,0 +1,8 @@
+---
+- name: Add Bond
+  network.cli.cli_config:
+    config: "{{ lines }}"
+  vars:
+    lines: |
+      set interfaces bonding bond0 
+      set interfaces bonding bond1 
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml
new file mode 100644
index 00000000..61395082
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml
@@ -0,0 +1,16 @@
+---
+- name: Setup
+  network.cli.cli_config:
+    config: "{{ lines }}"
+  vars:
+    lines: |
+      set interfaces bonding bond0
+      set interfaces bonding bond0 hash-policy 'layer2'
+      set interfaces bonding bond0 mode 'active-backup'
+      set interfaces ethernet eth1 bond-group bond0
+      set interfaces bonding bond1
+      set interfaces bonding bond0 primary 'eth1'
+      set interfaces bonding bond1 hash-policy 'layer2+3'
+      set interfaces bonding bond1 mode 'active-backup'
+      set interfaces ethernet eth2 bond-group bond1
+      set interfaces bonding bond1 primary 'eth2'
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml
new file mode 100644
index 00000000..1d7ee695
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml
@@ -0,0 +1,8 @@
+---
+- name: Remove Bond
+  network.cli.cli_config:
+    config: "{{ lines }}"
+  vars:
+    lines: |
+      delete interfaces bonding bond0 
+      delete interfaces bonding bond1 
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml
new file mode 100644
index 00000000..c5d3657f
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml
@@ -0,0 +1,14 @@
+---
+- name: Remove Config
+  network.cli.cli_config:
+    config: "{{ lines }}"
+  vars:
+    lines: |
+      delete interfaces bonding bond0 hash-policy
+      delete interfaces ethernet eth1 bond-group bond0
+      delete interfaces bonding bond0 mode
+      delete interfaces bonding bond0 primary
+      delete interfaces bonding bond1 hash-policy
+      delete interfaces ethernet eth2 bond-group bond1
+      delete interfaces bonding bond1 mode
+      delete interfaces bonding bond1 primary
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml
new file mode 100644
index 00000000..db6fb88d
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml
@@ -0,0 +1,46 @@
+---
+- debug:
+    msg: "Start vyos_lag_interfaces deleted integration tests ansible_connection={{ ansible_connection }}"
+
+- include_tasks: _populate.yaml
+
+- block:
+  - name: Delete attributes of given LAG interfaces.
+    vyos.vyos.vyos_lag_interfaces: &deleted
+      config:
+        - name: bond0
+        - name: bond1
+      state: deleted
+    register: result
+
+  - name: Assert that the before dicts were correctly generated
+    assert:
+      that:
+        - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+  - name: Assert that the correct set of commands were generated
+    assert:
+      that:
+        - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+  - name: Assert that the after dicts were correctly generated
+    assert:
+      that:
+        - "{{ deleted['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+  - name: Delete attributes of given interfaces (IDEMPOTENT)
+    vyos.vyos.vyos_lag_interfaces: *deleted
+    register: result
+
+  - name: Assert that the previous task was idempotent
+    assert:
+      that:
+        - "result.changed == false"
+
+  - name: Assert that the before dicts were correctly generated
+    assert:
+      that:
+        - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}"
+  
+  always:
+  - include_tasks: _remove_config.yaml
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml
new file mode 100644
index 00000000..78c9de16
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml
@@ -0,0 +1,60 @@
+---
+- debug:
+      msg: "START vyos_lag_interfaces merged integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _remove_bond.yaml
+
+- include_tasks: _add_bond.yaml
+
+- block:
+  - name: Merge the provided configuration with the exisiting running configuration
+    vyos.vyos.vyos_lag_interfaces: &merged
+        config:
+            - name: bond0
+              hash_policy: "layer2"
+              mode: "active-backup"
+              members:
+                  - member: eth1
+              primary: eth1
+
+            - name: bond1
+              hash_policy: "layer2+3"
+              mode: "active-backup"
+              members:
+                  - member: eth2
+              primary: eth2
+        state: merged
+    register: result
+
+  - name: Assert that before dicts were correctly generated
+    assert:
+        that: "{{ merged['before'] | symmetric_difference(result['before']) |length == 0 }}"
+
+  - name: Assert that correct set of commands were generated
+    assert:
+        that:
+            - "{{ merged['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+  - name: Assert that after dicts was correctly generated
+    assert:
+        that:
+            - "{{ merged['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+  - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT)
+    vyos.vyos.vyos_lag_interfaces: *merged
+    register: result
+
+  - name: Assert that the previous task was idempotent
+    assert:
+        that:
+            - "result['changed'] == false"
+
+  - name: Assert that before dicts were correctly generated
+    assert:
+        that:
+            - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+  always:
+  - include_tasks: _remove_config.yaml
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml
new file mode 100644
index 00000000..6139d9f0
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml
@@ -0,0 +1,54 @@
+---
+- debug:
+      msg: "START vyos_lag_interfaces overridden integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _remove_bond.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+  - name: Overrides all device configuration with provided configuration
+    vyos.vyos.vyos_lag_interfaces: &overridden
+        config:
+            - name: bond1
+              mode: "active-backup"
+              members:
+                  - member: eth2
+              primary: eth2
+              hash_policy: layer2
+        state: overridden
+    register: result
+
+  - name: Assert that before dicts were correctly generated
+    assert:
+        that:
+            - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+  - name: Assert that correct commands were generated
+    assert:
+        that:
+            - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+  - name: Assert that after dicts were correctly generated
+    assert:
+        that:
+            - "{{ overridden['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+  - name: Overrides all device configuration with provided configurations (IDEMPOTENT)
+    vyos.vyos.vyos_lag_interfaces: *overridden
+    register: result
+
+  - name: Assert that the previous task was idempotent
+    assert:
+        that:
+            - "result['changed'] == false"
+
+  - name: Assert that before dicts were correctly generated
+    assert:
+        that:
+            - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+  always:
+  - include_tasks: _remove_config.yaml
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml
new file mode 100644
index 00000000..ce469e06
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml
@@ -0,0 +1,51 @@
+---
+- debug:
+      msg: "START vyos_lag_interfaces replaced integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+  - name: Replace device configurations of listed LAG interfaces with provided configurations
+    vyos.vyos.vyos_lag_interfaces: &replaced
+        config:
+            - name: bond1
+              mode: "802.3ad"
+              hash_policy: "layer2"
+              members:
+                  - member: eth2
+        state: replaced
+    register: result
+
+  - name: Assert that correct set of commands were generated
+    assert:
+        that:
+            - "{{ replaced['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+  - name: Assert that before dicts are correctly generated
+    assert:
+        that:
+            - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+  - name: Assert that after dict is correctly generated
+    assert:
+        that:
+            - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+  - name: Replace device configurations of listed LAG interfaces with provided configurarions (IDEMPOTENT)
+    vyos.vyos.vyos_lag_interfaces: *replaced
+    register: result
+
+  - name: Assert that task was idempotent
+    assert:
+        that:
+            - "result['changed'] == false"
+
+  - name: Assert that before dict is correctly generated
+    assert:
+        that:
+            - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+  always:
+  - include_tasks: _remove_config.yaml
diff --git a/test/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml b/test/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml
new file mode 100644
index 00000000..eb3814eb
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml
@@ -0,0 +1,69 @@
+---
+- debug:
+    msg: "START vyos_lag_interfaces round trip integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _remove_bond.yaml
+
+- block:
+  - name: Apply the provided configuration (base config)
+    vyos.vyos.vyos_lag_interfaces:
+      config:
+        - name: bond0
+          hash_policy: "layer2"
+          mode: "active-backup"
+          members:
+            - member: eth1
+          primary: eth1
+
+        - name: bond1
+          hash_policy: "layer2+3"
+          mode: "active-backup"
+          members:
+            - member: eth2
+          primary: eth2
+
+      state: merged
+    register: base_config
+
+  - name: Gather lag_interfaces facts
+    vyos.vyos.vyos_facts:
+      gather_subset:
+        - default
+      gather_network_resources:
+        - lag_interfaces
+
+  - name: Apply the provided configuration (config to be reverted)
+    vyos.vyos.vyos_lag_interfaces:
+      config:
+        - name: bond0
+          hash_policy: "layer2+3"
+          mode: "802.3ad"
+          members:
+            - member: eth1
+
+        - name: bond1
+          hash_policy: "layer2"
+          mode: "xor-hash"
+          members:
+            - member: eth2
+      state: merged
+    register: result
+
+  - name: Assert that changes were applied
+    assert:
+      that: "{{ round_trip['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+  - name: Revert back to base config using facts round trip
+    vyos.vyos.vyos_lag_interfaces:
+      config: "{{ ansible_facts['network_resources']['lag_interfaces'] }}"
+      state: overridden
+    register: revert
+
+  - name: Assert that config was reverted
+    assert:
+      that: "{{ base_config['after'] | symmetric_difference(revert['after']) |length == 0 }}"
+
+  always:
+  - include_tasks: _remove_config.yaml
diff --git a/test/integration/targets/vyos_lag_interfaces/vars/main.yaml b/test/integration/targets/vyos_lag_interfaces/vars/main.yaml
new file mode 100644
index 00000000..8726e399
--- /dev/null
+++ b/test/integration/targets/vyos_lag_interfaces/vars/main.yaml
@@ -0,0 +1,115 @@
+---
+merged:
+  before:
+    - name: "bond0"
+
+    - name: "bond1"
+
+  commands:
+    - "set interfaces bonding bond0 hash-policy 'layer2'"
+    - "set interfaces bonding bond0 mode 'active-backup'"
+    - "set interfaces ethernet eth1 bond-group 'bond0'"
+    - "set interfaces bonding bond0 primary 'eth1'"
+    - "set interfaces bonding bond1 hash-policy 'layer2+3'"
+    - "set interfaces bonding bond1 mode 'active-backup'"
+    - "set interfaces ethernet eth2 bond-group 'bond1'"
+    - "set interfaces bonding bond1 primary 'eth2'"
+
+  after:
+    - name: "bond0"
+      hash_policy: "layer2"
+      members:
+        - member: eth1
+      mode: "active-backup"
+      primary: eth1
+
+    - name: "bond1"
+      hash_policy: "layer2+3"
+      members:
+        - member: eth2
+      mode: "active-backup"
+      primary: eth2
+
+populate:
+  - name: "bond0"
+    hash_policy: "layer2"
+    members:
+      - member: eth1
+    mode: "active-backup"
+    primary: eth1
+
+  - name: "bond1"
+    hash_policy: "layer2+3"
+    members:
+      - member: eth2
+    mode: "active-backup"
+    primary: eth2
+
+replaced:
+  commands:
+    - "delete interfaces bonding bond1 primary"
+    - "set interfaces bonding bond1 hash-policy 'layer2'"
+    - "set interfaces bonding bond1 mode '802.3ad'"
+
+  after:
+    - name: "bond0"
+      hash_policy: "layer2"
+      members:
+        - member: eth1
+      mode: "active-backup"
+      primary: eth1
+
+    - name: "bond1"
+      hash_policy: "layer2"
+      members:
+        - member: eth2
+      mode: "802.3ad"
+
+overridden:
+  commands:
+    - "delete interfaces bonding bond0 hash-policy"
+    - "delete interfaces ethernet eth1 bond-group 'bond0'"
+    - "delete interfaces bonding bond0 mode"
+    - "delete interfaces bonding bond0 primary"
+    - "set interfaces bonding bond1 hash-policy 'layer2'"
+
+  after:
+    - name: "bond0"
+    - name: "bond1"
+      hash_policy: "layer2"
+      members:
+        - member: eth2
+      mode: "active-backup"
+      primary: eth2
+
+deleted:
+  commands:
+    - "delete interfaces bonding bond0 hash-policy"
+    - "delete interfaces ethernet eth1 bond-group 'bond0'"
+    - "delete interfaces bonding bond0 mode"
+    - "delete interfaces bonding bond0 primary"
+    - "delete interfaces bonding bond1 hash-policy"
+    - "delete interfaces ethernet eth2 bond-group 'bond1'"
+    - "delete interfaces bonding bond1 mode"
+    - "delete interfaces bonding bond1 primary"
+
+  after:
+    - name: "bond0"
+
+    - name: "bond1"
+
+round_trip:
+  after:
+    - name: "bond0"
+      hash_policy: "layer2+3"
+      members:
+        - member: eth1
+      mode: "802.3ad"
+      primary: eth1
+
+    - name: "bond1"
+      hash_policy: "layer2"
+      members:
+        - member: eth2
+      mode: "xor-hash"
+      primary: eth2
-- 
cgit v1.2.3