Commit Graph

22 Commits

Author SHA1 Message Date
Joshua Spence
82b99c3fba Run acceptance tests against UniFi Network 7.4 (#377) 2023-06-07 14:11:01 +10:00
dependabot[bot]
3879e88f7a Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.25.0 to 2.26.0 (#353)
* Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.25.0 to 2.26.0

Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.25.0 to 2.26.0.
- [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases)
- [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.25.0...v2.26.0)

---
updated-dependencies:
- dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Address deprecations

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joshua Spence <josh@spence.com.au>
2023-03-22 10:43:31 +11:00
Joshua Spence
105d542879 Add DiffSuppressFunc for op_mode and aggregate_num_ports (#344) 2023-03-08 22:27:58 +11:00
Paul Tyng
0401ae6913 Add support for port aggregation (#182)
* Add support for port aggregation

Fixes #142

* Return `*unifi.Device` from `allocateDevice`

* Merge `TestAccDevice_switch_portOverrides` and `TestAccDevice_remove_portOverrides`

* Add tests

Note that only switches with a Broadcom, Microsemi or Nephos chipset support both port mirroring and port aggregation.

```java
package com.ubnt.data;

public class Device extends X implements Sanitizable
{

  // ...

  public int getMaxMirrorSession() {
    int n = 0;
    if (this.getModel() == Model.\u00f8\u00f50000) {
      n = 2;
    }
    else if (this.isBroadcomSwitch() || this.isMicrosemiSwitch() || this.isMediaTekSwitch() || this.isNephosSwitch()) {
      n = 1;
    }
    return this.thisforObject().getInt("max_mirror_sessions", n);
  }

  public int getMaxAggregation() {
    int n = 0;
    if (this.isBroadcomSwitch() || this.isMicrosemiSwitch() || this.isNephosSwitch()) {
      n = 6;
    }
    return this.thisforObject().getInt("max_aggregate_sessions", n);
  }

  // ...

  public boolean isBroadcomSwitch() {
    final Model model = this.getModel();
    return model.getChipset().typeOf(Chipset.\u00f400000) && model.getType() == DeviceType.if;
  }

  public boolean isMicrosemiSwitch() {
    final Model model = this.getModel();
    return model.getChipset().typeOf(Chipset.o00000) && model.getType() == DeviceType.if;
  }

  public boolean isMediaTekSwitch() {
    final Model model = this.getModel();
    return model.getChipset().typeOf(Chipset.\u00d3O0000) && model.getType() == DeviceType.if;
  }

  public boolean isNephosSwitch() {
    final Model model = this.getModel();
    return model.getChipset().typeOf(Chipset.\u00d5O0000) && model.getType() == DeviceType.if;
  }

  // ...

}
```

To extract the list of models that use one of these chipsets I used the following script (executed as `java --class-path path/to/ace.jar main.java`):

```java
import com.ubnt.data.Model;

class UniFiModels {
  public static void main(String[] args) {
    /*
    for (Model model : Model.values()) {
      System.out.printf(
          "Model = %s\nSKU = %s\nType = %s\nFeatures = %s\nChipset = %s\nSysId = %s\nPortNum = %s\n\n",
          model,
          model.getSku(),
          model.getType(),
          model.getFeatures(),
          model.getChipset(),
          model.getSysId(),
          model.getPortNum());
    }
    */

    for (Model model : Model.values()) {
      System.out.printf("%s: %s (%s)\n", model.getChipset(), model, model.getSku());
    }
  }
}

```

---------

Co-authored-by: Joshua Spence <josh@spence.com.au>
2023-03-08 18:02:34 +11:00
Joshua Spence
c713a22aa6 Don't use USW-Leaf in acceptance tests (#336)
The USW-Leaf consistently fails to be adopted:

```
[2023-03-03T04:25:11,002] XXX <fake-UDC48X6> ERROR inform - dev[00:27:22:00:00:12] failed to update capability: api.err.InvalidReportPort
[2023-03-03T04:25:21,004] XXX <fake-UDC48X6> ERROR inform - dev[00:27:22:00:00:12] failed to update capability: api.err.InvalidReportPort
[2023-03-03T04:25:31,005] XXX <fake-UDC48X6> ERROR inform - dev[00:27:22:00:00:12] failed to update capability: api.err.InvalidReportPort
[2023-03-03T04:25:41,006] XXX <fake-UDC48X6> ERROR inform - dev[00:27:22:00:00:12] failed to update capability: api.err.InvalidReportPort
```
2023-03-03 17:11:32 +11:00
Joshua Spence
b27b54a755 Use testcontainers-go (#330)
* Use `testcontainers-go`

* Wait for ready

* Sleep

* Remove `time.Sleep`

* Wait until devices appear

* Pass environment

* Add `golangci-lint` to tools

* Minor
2023-03-03 15:19:19 +11:00
Joshua Spence
284c42aaae Improve device allocation (#333)
* Improve device allocation

* Improve

* Tweak MAC code

* Add `golangci-lint` to tools

* Debugging

* Revert "Debugging"

This reverts commit 90c0b054256e9a741193854dc6b5984f6e749a9a.

* Use `golang-set`

* Remove `sync.Mutex`

* Cleanup
2023-03-03 14:05:09 +11:00
Joshua Spence
cecd408e57 Migrate to terraform-plugin-testing (#331)
See https://developer.hashicorp.com/terraform/plugin/testing/migrating.
2023-03-03 09:04:31 +11:00
Joshua Spence
2eba55a7f3 Change default value for allow_adoption (#317)
* Change default value for `allow_adoption`

* Update docs
2023-02-28 22:19:22 +11:00
Joshua Spence
5cc1679b7f Tidying 2023-02-28 21:52:07 +11:00
Joshua Spence
c0a2d0e07b Skip PDUs 2023-02-28 21:52:07 +11:00
Joshua Spence
b5a1680cd9 Revert "Remove debug code"
This reverts commit 4f768d67c08ae476033bfc59d428c14f6cd0435d.
2023-02-28 21:52:07 +11:00
Joshua Spence
c3b52a2191 Temp 2023-02-28 21:52:07 +11:00
Joshua Spence
5becf45299 Remove debug code 2023-02-28 21:52:07 +11:00
Joshua Spence
6a337ed666 Add another USP-RPS model 2023-02-28 21:52:07 +11:00
Joshua Spence
8264d9f30b Add temporary debug code 2023-02-28 21:52:07 +11:00
Joshua Spence
592bc6267f Don't use the USP-RPS as a test device
The [USP-RPS](https://store.ui.com/products/usp-rps) is a "switch" (has `usw` type) but it doesn't have ports and so the port override tests will fail. Just ignore these devices.
2023-02-28 21:52:07 +11:00
Joshua Spence
a83f9b3dbd Ensure the same MAC address isn't reused 2023-02-28 16:47:22 +11:00
Michon van Dooren
05df488c3b Add test clearing device portoverrides (#313)
* Add test clearing device portoverrides

* Update `go-unifi`

---------

Co-authored-by: Joshua Spence <josh@spence.com.au>
2023-02-28 11:54:15 +11:00
Joshua Spence
066163a22c Allow device adoption (#188)
* Allow device adoption

* Handling disappearing device

* Allocate test devices dynamically

* Increase `NotFoundChecks`

* Demo devices don't seem to have sequential MACs

* Change default for `forget_on_destroy`

* Minor
2023-02-24 10:42:06 +11:00
Paul Tyng
5e428a4605 Fix some linting issues 2021-08-27 09:59:30 -04:00
Paul Tyng
118f612b49 Modify device a little to allow creation, add basic testing 2021-03-27 16:58:23 -04:00