Skip to content

CICD: GoReleaser version #2#1

Closed
cafferata wants to merge 67 commits intomasterfrom
cicd/goreleaser-version
Closed

CICD: GoReleaser version #2#1
cafferata wants to merge 67 commits intomasterfrom
cicd/goreleaser-version

Conversation

@cafferata
Copy link
Copy Markdown
Owner

No description provided.

cafferata and others added 30 commits December 5, 2023 08:46
…iff2 (StackExchange#2683)

Co-authored-by: Costas Drogos <[email protected]>
Co-authored-by: imlonghao <[email protected]>
Co-authored-by: Jeffrey Cafferata <[email protected]>
Co-authored-by: Vincent Hagen <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@cafferata cafferata force-pushed the cicd/goreleaser-version branch 2 times, most recently from ea6ac6e to b05eccd Compare January 3, 2024 21:11
@cafferata cafferata force-pushed the cicd/goreleaser-version branch from 7c4d876 to f3677a8 Compare January 3, 2024 21:39
@cafferata cafferata force-pushed the cicd/goreleaser-version branch from f3677a8 to 4c976f0 Compare January 3, 2024 21:44
@cafferata cafferata changed the title Cicd/goreleaser version CICD: GoReleaser version #2 Jan 3, 2024
@cafferata cafferata closed this Jan 5, 2024
@cafferata cafferata deleted the cicd/goreleaser-version branch January 5, 2024 14:55
cafferata pushed a commit that referenced this pull request Dec 16, 2025
…nge (StackExchange#3855)

Fixes StackExchange#3854 

Unfortunately I couldn't run the integrationTests properly as INWX
doesn't seem to have properly updated their sandbox environment (it
still presents `int` instead of `string` like production). Hence, the
tests do fail. I don't want to run this against my own production
account, to be frank.

See:
```shell
$ curl -X POST https://api.ote.domrobot.com/xmlrpc/ -H "Content-Type: application/xml" -d '<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
   <methodName>nameserver.info</methodName>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>user</name>
                  <value>
                     <string>[USER]</string>
                  </value>
               </member>
               <member>
                  <name>lang</name>
                  <value>
                     <string>en</string>
                  </value>
               </member>
               <member>
                  <name>pass</name>
                  <value>
                     <string>[PASS]</string>
                  </value>
               </member>
               <member>
                  <name>domain</name>
                  <value>
                     <string>[DOMAIN]</string>
                  </value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodCall>' | xmllint --format - | grep -iE "id|roId" -C3
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3968    0  2971  100   997  13375   4488 --:--:-- --:--:-- --:--:-- 17954
            <value>
              <struct>
                <member>
                  <name>roId</name>
                  <value>
                    <int>9677</int>
                  </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>118057</int>
                              </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>118060</int>
                              </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>79610</int>
                              </value>
--
                        <value>
                          <struct>
                            <member>
                              <name>id</name>
                              <value>
                                <int>77243</int>
                              </value>
--
            </value>
          </member>
          <member>
            <name>svTRID</name>
            <value>
              <string>20251127--ote</string>
            </value>
```

Hence, only done manualy tests via `dnscontrol push --domains
<example.com>`:
(tested create, delete and modify)

```text
CONCURRENTLY checking for 0 zone(s)
SERIALLY checking for 1 zone(s)
Serially checking for zone: "example.tld"
CONCURRENTLY gathering records of 0 zone(s)
SERIALLY gathering records of 1 zone(s)
Serially Gathering: "example.tld"
******************** Domain: example.tld
3 corrections (PK-INWX)
#1: - DELETE _test1.example.tld TXT "123" ttl=43200
SUCCESS!
#2: ± MODIFY _test2.example.tld TXT ("1234" ttl=43200) -> ("12345" ttl=43200)
SUCCESS!
#3: + CREATE _test4.example.tld TXT "123" ttl=43200
SUCCESS!
Done. 3 corrections.
```
cafferata pushed a commit that referenced this pull request Dec 16, 2025
Closes StackExchange#3787

This PR is adding a `HETZNER_V2` provider for the "new" Hetzner DNS API.

Testing:
- The integration tests are passing.
- Manual testing:
  - `preview` (see diff for existing zone)
- `preview --populate-on-preview` (see full diff for newly created zone)
  - `push` (see full diff; no diff after push)
- `push` (see full diff; no diff after push to newly created zone --
i.e. single pass and done)

```js
var REG_NONE = NewRegistrar('none')
var DSP = NewDnsProvider('HETZNER_V2')

D('testing-2025-11-14-7.dev', REG_NONE, DnsProvider(DSP),
    A('@', '127.0.0.1')
)
```

<details>

```
# push for newly created zone
CONCURRENTLY checking for 1 zone(s)
SERIALLY checking for 0 zone(s)
Waiting for concurrent checking(s) to complete...DONE
******************** Domain: testing-2025-11-14-7.dev
1 correction (HETZNER_V2)
#1: Ensuring zone "testing-2025-11-14-7.dev" exists in "HETZNER_V2"
SUCCESS!
CONCURRENTLY gathering records of 1 zone(s)
SERIALLY gathering records of 0 zone(s)
Waiting for concurrent gathering(s) to complete...DONE
******************** Domain: testing-2025-11-14-7.dev
4 corrections (HETZNER_V2)
#1: ± MODIFY-TTL testing-2025-11-14-7.dev NS helium.ns.hetzner.de. ttl=(3600->300)
± MODIFY-TTL testing-2025-11-14-7.dev NS hydrogen.ns.hetzner.com. ttl=(3600->300)
± MODIFY-TTL testing-2025-11-14-7.dev NS oxygen.ns.hetzner.com. ttl=(3600->300)
SUCCESS!
#2: + CREATE testing-2025-11-14-7.dev A 127.0.0.1 ttl=300
SUCCESS!
Done. 5 corrections.
```
</details>

Feedback for @jooola and @LKaemmerling:
- The SDK was very useful in getting 80% there! Nice! 🎉 
- Footgun:
- The `result` values are not "up-to-date" after waiting for an
`Action`, e.g. `Zone.AuthoritativeNameservers.Assigned` is not set when
`Client.Zone.Create()` returns and the following "wait" will not update
it.
- Taking a step back here: Waiting for an `Action` with a separate SDK
call does not seem very natural to me. Does the SDK-user need to know
that you are processing operations asynchronous? (Which seems like an
implementation detail to me, something that the SDK could abstrct over.)
Can `Client.Zone.Create()` return the final `Zone` instead of the
intermediate result?
- Features missing compared to the DNS Console, in priority order:
- It is no longer possible to remove your provided name servers from the
root/apex. Use-case: dual-home/multi-home zone with fewer than three
servers from Hetzner. I'm operating one of these and cannot migrate over
until this is fixed.
- Performance regression due to lack of bulk create/modify. E.g. [one of
the test
suites](https://github.com/StackExchange/dnscontrol/blob/a71b89e5a2bf9a31872b6b2095c9d4eea641dad3/integrationTest/integration_test.go#L619)
spends about 4.5 minutes on making creating 100 record-sets and then
another 4 minutes for deleting them in sequence again. With your async
API, these are `create 2*100 + delete 2*100 = 400` API calls.
Previously, these were `create 1 + delete 100 = 101` API calls. Are you
planning on adding batch processing again?
- Usability nits
- Compared to other record-set based APIs, upserts for record-sets are
missing. This applies to records of a record-set and the ttl of the
record-set (see separate SDK calls for the cases `diff2.CREATE` vs
`diff2.CHANGE` and two calls in `diff2.CHANGE` for updating the TTL vs
records).
- Some SDK methods return an `Action` (e.g. `Zone.ChangeRRSetTTL()`),
others wrap the `Action` in a struct (`Client.Zone.CreateRRSet()`) --
even when the struct has a single field (`ZoneRRSetDeleteResult`).

---------

Co-authored-by: "Jonas L." <[email protected]>
Co-authored-by: "Lukas Kämmerling" <[email protected]>
Co-authored-by: Tom Limoncelli <[email protected]>
cafferata pushed a commit that referenced this pull request Dec 16, 2025
…hange#3859)

- Closes StackExchange#3853

This PR is gracefully handling FQDN labels when listing records from the
Hetzner DNS Control api.

These records can be created via other tools or the browser UI.

Testing:

```diff
diff --git a/providers/hetzner/types.go b/providers/hetzner/types.go
index 964f1b7..3429acc2 100644
--- a/providers/hetzner/types.go
+++ b/providers/hetzner/types.go
@@ -3,2 +3,3 @@ package hetzner
 import (
+       "fmt"
        "strings"
@@ -63,3 +64,3 @@ func fromRecordConfig(in *models.RecordConfig, zone zone) record {
        r := record{
-               Name:   in.GetLabel(),
+               Name:   in.GetLabelFQDN() + ".",
                Type:   in.Type,
@@ -69,2 +70,3 @@ func fromRecordConfig(in *models.RecordConfig, zone zone) record {
        }
+       fmt.Printf("CREATE: %q\n", r.Name)
 
@@ -93,2 +95,3 @@ func toRecordConfig(domain string, r *record) (*models.RecordConfig, error) {
        }
+       fmt.Printf("LISTING: %q\n", r.Name)
        if strings.HasSuffix(r.Name, "."+domain+".") {
```

Config:
```js
var REG_NONE = NewRegistrar('none')
var DSP = NewDnsProvider("HETZNER")

D('testing1.dev', REG_NONE, DnsProvider(DSP),
  A('@', '127.0.0.1'),
  A('foo', '127.0.0.1')
)
```

First push:
```
Waiting for concurrent gathering(s) to complete...LISTING: "@"
LISTING: "@"
LISTING: "@"
LISTING: "@"
CREATE: "foo.testing1.dev."
DONE
******************** Domain: testing1.dev
1 correction (HETZNER)
#1: Batch creation of records:
	+ CREATE A foo.testing1.dev 127.0.0.1 ttl=300
SUCCESS!
Done. 1 corrections.
```

Second push (no-op):
```
Waiting for concurrent gathering(s) to complete...LISTING: "@"
LISTING: "@"
LISTING: "@"
LISTING: "@"
LISTING: "foo.testing1.dev."
DONE
******************** Domain: testing1.dev
Done. 0 corrections.
```

DNS query:
```
$ dig foo.testing1.dev. @helium.ns.hetzner.de.
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53563
foo.testing1.dev.	300	IN	A	127.0.0.1
```

Additional testing:
- update/delete `foo`  when record `foo.testing1.dev.` exists, works
- creating `foo.testing1.dev` is treated as
`foo.testing1.dev.testing1.dev.` in the API, hence the specific suffix
check for `<dot>DOMAIN<dot>`
- Test with HETZNER_V2, rejects records with FQDN

```
FAILURE! has dot (.) suffix (invalid_input, 50f9cf872ed8f1f808fd33c25cf88a81)
```

<!--
## Before submiting a pull request

Please make sure you've run the following commands from the root
directory.

    bin/generate-all.sh

(this runs commands like "go generate", fixes formatting, and so on)

## Release changelog section

Help keep the release changelog clear by pre-naming the proper section
in the GitHub pull request title.

Some examples:
* CICD: Add required GHA permissions for goreleaser
* DOCS: Fixed providers with "contributor support" table
* ROUTE53: Allow R53_ALIAS records to enable target health evaluation

More examples/context can be found in the file .goreleaser.yml under the
'build' > 'changelog' key.
!-->
cafferata pushed a commit that referenced this pull request Dec 16, 2025
Tested dnscontrol with `CanConcur()` enabled and seems to work fine.
Read StackExchange#2873 to see what to do, and hope below is the right way to test.

```text
$ go build -race -o dnscontrol-race
$ ./dnscontrol-race version
v4.27.2-0.20251127184623-cf6b870052c0+dirty

$ dnscontrol-race preview
CONCURRENTLY checking for 16 zone(s)
SERIALLY checking for 6 zone(s)
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Waiting for concurrent checking(s) to complete...DONE
CONCURRENTLY gathering records of 16 zone(s)
SERIALLY gathering records of 6 zone(s)
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Waiting for concurrent gathering(s) to complete...DONE
******************** Domain: domainX.tld
INFO#1: 4 records not being deleted because of NO_PURGE:
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
INFO#1: 4 records not being deleted because of NO_PURGE:
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
1 correction (PK-INWX)
INFO#1: 1 records not being deleted because of IGNORE*():
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
30 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
2 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
2 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
Done. 37 corrections.
```

Unfortunately INWX sandbox is sporadically still broken so `go test` is
of limited help:
```text
$ go test -v -verbose -profile INWX
=== RUN   TestDNSProviders
Testing Profile="INWX" (TYPE="INWX")
    helpers_test.go:122: INWX: Unable to login
--- FAIL: TestDNSProviders (30.03s)
=== RUN   TestDualProviders
Testing Profile="INWX" (TYPE="INWX")
    provider_test.go:50: Clearing everything
    provider_test.go:57: Adding test nameservers
    provider_test.go:44: #1:
        + CREATE dnscontrol-inwx.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        + CREATE dnscontrol-inwx.com NS ns2.example.com. ttl=300
    provider_test.go:60: Running again to ensure stability
    provider_test.go:76: Removing test nameservers
    provider_test.go:44: #1:
        - DELETE dnscontrol-inwx.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        - DELETE dnscontrol-inwx.com NS ns2.example.com. ttl=300
--- PASS: TestDualProviders (2.44s)
=== RUN   TestNameserverDots
Testing Profile="INWX" (TYPE="INWX")
=== RUN   TestNameserverDots/No_trailing_dot_in_nameserver
--- PASS: TestNameserverDots (0.30s)
    --- PASS: TestNameserverDots/No_trailing_dot_in_nameserver (0.00s)
=== RUN   TestDuplicateNameservers
Testing Profile="INWX" (TYPE="INWX")
    provider_test.go:145: Skipping. Deduplication logic is not implemented for this provider.
--- SKIP: TestDuplicateNameservers (0.35s)
FAIL
exit status 1
FAIL    github.com/StackExchange/dnscontrol/v4/integrationTest  33.127s
```
cafferata pushed a commit that referenced this pull request Feb 20, 2026
…hange#4087)

Modifying a Dynamic DNS record on Hurricane Electric DNS (e.g. changing
TTL) silently dropped the dynamic flag and its associated DDNS key.
There was also no way to manage DDNS keys from dnsconfig.js. This PR
fixes StackExchange#4085.
cc @rblenkinsopp

## Changes
- Record modifications now retain (or explicitly toggle) the Dynamic DNS
flag. Unspecified records inherit their current state from the provider.
- New record modifiers `HEDNS_DYNAMIC_ON`, `HEDNS_DYNAMIC_OFF`, and
`HEDNS_DDNS_KEY(key)` allow controlling Dynamic DNS and setting DDNS
keys from dnsconfig.js. Keys are write-only since HE DNS doesn't expose
them for reading.
- Zone export includes dynamic state in JS and TSV output formats for
HEDNS.
- Docs: updated provider docs and added record modifier reference pages.

## Tests
Added new test groups to integration tests for HEDNS covering dynamic
on/off, DDNS keys, state inheritance, and mixed records.

<details>
<summary>
Full test run results

```
PASS
ok      github.com/StackExchange/dnscontrol/v4/integrationTest  1053.995s
```
</summary>

```
--- PASS: TestDNSProviders (1041.65s)
    --- PASS: TestDNSProviders/example.com (1036.81s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty (0.68s)
        --- PASS: TestDNSProviders/example.com/00:A:Create_A (1.14s)
        --- PASS: TestDNSProviders/example.com/00:A:Change_A_target (1.23s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#01 (0.83s)
        --- PASS: TestDNSProviders/example.com/01:Apex:Create_A (1.54s)
        --- PASS: TestDNSProviders/example.com/01:Apex:Change_A_target (1.23s)
        --- PASS: TestDNSProviders/example.com/02:Protocol-Wildcard_***SKIPPED(excluded_by_not("HEDNS"))***:Empty (0.87s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#02 (0.38s)
        --- PASS: TestDNSProviders/example.com/03:AAAA:Create_AAAA (1.21s)
        --- PASS: TestDNSProviders/example.com/03:AAAA:Change_AAAA_target (1.11s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#03 (0.79s)
        --- PASS: TestDNSProviders/example.com/04:CNAME:Create_a_CNAME (2.28s)
        --- PASS: TestDNSProviders/example.com/04:CNAME:Change_CNAME_target (1.23s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#04 (0.69s)
        --- PASS: TestDNSProviders/example.com/05:CNAME-short:Create_a_CNAME (10.13s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#05 (1.19s)
        --- PASS: TestDNSProviders/example.com/06:MX:Create_MX_apex (1.50s)
        --- PASS: TestDNSProviders/example.com/06:MX:Change_MX_apex (1.50s)
        --- PASS: TestDNSProviders/example.com/06:MX:Create_MX (1.80s)
        --- PASS: TestDNSProviders/example.com/06:MX:Change_MX_target (1.35s)
        --- PASS: TestDNSProviders/example.com/06:MX:Change_MX_p (19.12s)
        --- PASS: TestDNSProviders/example.com/07:RP_***SKIPPED(CanUseRP_not_supported)***:Empty (9.23s)
        --- PASS: TestDNSProviders/example.com/08:RP_***SKIPPED(CanUseRP_not_supported)***:Empty (0.48s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#06 (0.53s)
        --- PASS: TestDNSProviders/example.com/09:TXT:Create_TXT (1.82s)
        --- PASS: TestDNSProviders/example.com/09:TXT:Change_TXT_target (9.19s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#07 (0.86s)
        --- PASS: TestDNSProviders/example.com/10:ManyAtOnce:CreateManyAtLabel (2.22s)
        --- PASS: TestDNSProviders/example.com/10:ManyAtOnce:Empty (9.90s)
        --- PASS: TestDNSProviders/example.com/10:ManyAtOnce:Create_an_A_record (1.23s)
        --- PASS: TestDNSProviders/example.com/10:ManyAtOnce:Add_at_label1 (1.36s)
        --- PASS: TestDNSProviders/example.com/10:ManyAtOnce:Add_at_label2 (1.37s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#08 (1.39s)
        --- PASS: TestDNSProviders/example.com/11:manyTypesAtOnce:CreateManyTypesAtLabel (2.29s)
        --- PASS: TestDNSProviders/example.com/11:manyTypesAtOnce:Empty (1.32s)
        --- PASS: TestDNSProviders/example.com/11:manyTypesAtOnce:Create_an_A_record (1.15s)
        --- PASS: TestDNSProviders/example.com/11:manyTypesAtOnce:Add_Type_At_Label (1.36s)
        --- PASS: TestDNSProviders/example.com/11:manyTypesAtOnce:Add_Type_At_Label#01 (1.48s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#09 (1.44s)
        --- PASS: TestDNSProviders/example.com/12:Attl:Create_Arc (10.19s)
        --- PASS: TestDNSProviders/example.com/12:Attl:Change_TTL (1.23s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#10 (0.69s)
        --- PASS: TestDNSProviders/example.com/13:TTL:Start (2.08s)
        --- PASS: TestDNSProviders/example.com/13:TTL:Change_a_ttl (1.77s)
        --- PASS: TestDNSProviders/example.com/13:TTL:Change_single_target_from_set (1.22s)
        --- PASS: TestDNSProviders/example.com/13:TTL:Change_all_ttls (10.37s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#11 (1.39s)
        --- PASS: TestDNSProviders/example.com/14:add_to_label_and_change_orig_ttl:Setup (1.23s)
        --- PASS: TestDNSProviders/example.com/14:add_to_label_and_change_orig_ttl:Add_at_same_label,_new_ttl (1.57s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#12 (1.08s)
        --- PASS: TestDNSProviders/example.com/15:TypeChange:Create_A (1.19s)
        --- PASS: TestDNSProviders/example.com/15:TypeChange:Change_to_MX (1.60s)
        --- PASS: TestDNSProviders/example.com/15:TypeChange:Change_back_to_A (1.67s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#13 (0.69s)
        --- PASS: TestDNSProviders/example.com/16:TypeChangeHard:Create_a_CNAME (1.25s)
        --- PASS: TestDNSProviders/example.com/16:TypeChangeHard:Change_to_A_record (9.23s)
        --- PASS: TestDNSProviders/example.com/16:TypeChangeHard:Change_back_to_CNAME (10.16s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#14 (9.51s)
        --- PASS: TestDNSProviders/example.com/17:HTTPS:Create_a_HTTPS_record (1.68s)
        --- PASS: TestDNSProviders/example.com/17:HTTPS:Change_HTTPS_priority (11.36s)
        --- PASS: TestDNSProviders/example.com/17:HTTPS:Change_HTTPS_target (1.22s)
        --- PASS: TestDNSProviders/example.com/17:HTTPS:Change_HTTPS_params (1.20s)
        --- PASS: TestDNSProviders/example.com/17:HTTPS:Change_HTTPS_params-empty (1.23s)
        --- PASS: TestDNSProviders/example.com/17:HTTPS:Change_HTTPS_all (1.60s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#15 (0.83s)
        --- PASS: TestDNSProviders/example.com/18:Ech:Create_a_HTTPS_record (1.23s)
        --- PASS: TestDNSProviders/example.com/18:Ech:Add_an_ECH_key (1.18s)
        --- PASS: TestDNSProviders/example.com/18:Ech:Ignore_the_ECH_key_while_changing_other_values (1.16s)
        --- PASS: TestDNSProviders/example.com/18:Ech:Change_the_ECH_key_and_other_values (8.88s)
        --- PASS: TestDNSProviders/example.com/18:Ech:Another_domain_with_a_different_ECH_value (1.58s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#16 (0.84s)
        --- PASS: TestDNSProviders/example.com/19:SVCB:Create_a_SVCB_record (1.23s)
        --- PASS: TestDNSProviders/example.com/19:SVCB:Change_SVCB_priority (1.24s)
        --- PASS: TestDNSProviders/example.com/19:SVCB:Change_SVCB_target (1.27s)
        --- PASS: TestDNSProviders/example.com/19:SVCB:Change_SVCB_params (1.20s)
        --- PASS: TestDNSProviders/example.com/19:SVCB:Change_SVCB_params-empty (1.17s)
        --- PASS: TestDNSProviders/example.com/19:SVCB:Change_SVCB_all (1.12s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#17 (0.78s)
        --- PASS: TestDNSProviders/example.com/20:CNAME:Record_pointing_to_@ (10.88s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#18 (2.19s)
        --- PASS: TestDNSProviders/example.com/21:ApexMX:Record_pointing_to_@ (1.80s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#19 (1.05s)
        --- SKIP: TestDNSProviders/example.com/22:NullMX:create (0.00s)
        --- PASS: TestDNSProviders/example.com/22:NullMX:unnull (12.58s)
        --- SKIP: TestDNSProviders/example.com/22:NullMX:renull (0.00s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#20 (1.81s)
        --- SKIP: TestDNSProviders/example.com/23:NullMXApex:create (0.00s)
        --- PASS: TestDNSProviders/example.com/23:NullMXApex:unnull (13.39s)
        --- SKIP: TestDNSProviders/example.com/23:NullMXApex:renull (0.00s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#21 (10.49s)
        --- PASS: TestDNSProviders/example.com/24:NS:NS_for_subdomain (1.30s)
        --- PASS: TestDNSProviders/example.com/24:NS:Dual_NS_for_subdomain (1.50s)
        --- PASS: TestDNSProviders/example.com/24:NS:NS_Record_pointing_to_@ (2.47s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#22 (1.17s)
        --- PASS: TestDNSProviders/example.com/25:NS_only_APEX:Single_NS_at_apex (1.42s)
        --- PASS: TestDNSProviders/example.com/25:NS_only_APEX:Dual_NS_at_apex (1.47s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#23 (1.01s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_0-byte_TXT (1.19s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_254-byte_TXT (1.57s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_255-byte_TXT (1.45s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_256-byte_TXT (1.44s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_509-byte_TXT (1.57s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_510-byte_TXT (1.65s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_511-byte_TXT (11.49s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_764-byte_TXT (9.13s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_765-byte_TXT (10.48s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:a_766-byte_TXT (8.60s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_1_single-quote (9.92s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_1_backtick (1.92s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_1_dq-1interior (1.58s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_2_dq-2interior (1.57s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_1_dq-left (1.24s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_1_dq-right (1.29s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_semicolon (1.66s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_with_semicolon_ws (1.58s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_interior_ws (1.56s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:TXT_trailing_ws (1.48s)
        --- PASS: TestDNSProviders/example.com/26:complex_TXT:Create_a_TXT/SPF (1.52s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#24 (9.46s)
        --- PASS: TestDNSProviders/example.com/27:TXT_backslashes:TXT_with_backslashs (2.63s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#25 (1.80s)
        --- PASS: TestDNSProviders/example.com/28:Case_Sensitivity:Create_CAPS (1.46s)
        --- PASS: TestDNSProviders/example.com/28:Case_Sensitivity:Downcase_label (1.25s)
        --- PASS: TestDNSProviders/example.com/28:Case_Sensitivity:Downcase_target (1.92s)
        --- PASS: TestDNSProviders/example.com/28:Case_Sensitivity:Upcase_both (11.17s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#26 (9.31s)
        --- PASS: TestDNSProviders/example.com/29:testByLabel:initial (1.55s)
        --- PASS: TestDNSProviders/example.com/29:testByLabel:changeOne (1.20s)
        --- PASS: TestDNSProviders/example.com/29:testByLabel:deleteOne (1.05s)
        --- PASS: TestDNSProviders/example.com/29:testByLabel:addOne (9.10s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#27 (0.99s)
        --- PASS: TestDNSProviders/example.com/30:testByRecordSet:initial (11.77s)
        --- PASS: TestDNSProviders/example.com/30:testByRecordSet:changeOne (1.26s)
        --- PASS: TestDNSProviders/example.com/30:testByRecordSet:deleteOne (1.19s)
        --- PASS: TestDNSProviders/example.com/30:testByRecordSet:addOne (11.18s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#28 (3.65s)
        --- PASS: TestDNSProviders/example.com/31:IDNA:Internationalized_name (11.14s)
        --- PASS: TestDNSProviders/example.com/31:IDNA:Change_IDN (1.29s)
        --- PASS: TestDNSProviders/example.com/31:IDNA:Chinese_label (1.60s)
        --- PASS: TestDNSProviders/example.com/31:IDNA:Internationalized_CNAME_Target (9.07s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#29 (0.70s)
        --- PASS: TestDNSProviders/example.com/32:IDNAs_in_CNAME_targets:IDN_CNAME_AND_Target (1.38s)
        --- PASS: TestDNSProviders/example.com/33:pager101_***SKIPPED(excluded_by_not("HEDNS"))***:Empty (0.68s)
        --- PASS: TestDNSProviders/example.com/34:pager601_***SKIPPED(disabled_by_only)***:Empty (2.12s)
        --- PASS: TestDNSProviders/example.com/35:pager1201_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/36:batchRecordswithOthers_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#30 (0.49s)
        --- PASS: TestDNSProviders/example.com/37:CAA:CAA_record (17.47s)
        --- PASS: TestDNSProviders/example.com/37:CAA:CAA_change_tag (11.19s)
        --- PASS: TestDNSProviders/example.com/37:CAA:CAA_change_target (10.06s)
        --- PASS: TestDNSProviders/example.com/37:CAA:CAA_change_flag (1.32s)
        --- PASS: TestDNSProviders/example.com/37:CAA:CAA_many_records (1.55s)
        --- PASS: TestDNSProviders/example.com/37:CAA:CAA_whitespace (1.13s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#31 (0.77s)
        --- PASS: TestDNSProviders/example.com/38:LOC:Single_LOC_record (11.28s)
        --- PASS: TestDNSProviders/example.com/38:LOC:Update_single_LOC_record (4.88s)
        --- PASS: TestDNSProviders/example.com/38:LOC:Multiple_LOC_records-create_a-d_modify_apex (17.60s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#32 (1.99s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_record (1.16s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_second_record (1.27s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_delete_second_record (2.54s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_change_order (1.30s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_change_preference (10.28s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_change_flags (1.26s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_change_service (1.89s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_change_regexp (1.55s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_remove_regexp_and_add_target (1.52s)
        --- PASS: TestDNSProviders/example.com/39:NAPTR:NAPTR_change_target (8.69s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#33 (9.01s)
        --- PASS: TestDNSProviders/example.com/40:PTR:Create_PTR_record (8.69s)
        --- PASS: TestDNSProviders/example.com/40:PTR:Modify_PTR_record (1.27s)
        --- PASS: TestDNSProviders/example.com/41:SOA_***SKIPPED(CanUseSOA_not_supported)***:Empty (1.05s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#34 (0.42s)
        --- PASS: TestDNSProviders/example.com/42:SRV:SRV_record (1.55s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Second_SRV_record,_same_prio (1.73s)
        --- PASS: TestDNSProviders/example.com/42:SRV:3_SRV (1.29s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Delete_one (10.99s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Change_Target (9.05s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Change_Priority (1.18s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Change_Weight (9.09s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Change_Port (9.50s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Empty (1.13s)
        --- PASS: TestDNSProviders/example.com/42:SRV:Null_Target (8.77s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#35 (0.68s)
        --- PASS: TestDNSProviders/example.com/43:SRV:Create_SRV333 (1.24s)
        --- PASS: TestDNSProviders/example.com/43:SRV:Change_TTL999 (1.57s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#36 (9.64s)
        --- PASS: TestDNSProviders/example.com/44:SSHFP:SSHFP_record (9.94s)
        --- PASS: TestDNSProviders/example.com/44:SSHFP:SSHFP_change_algorithm (8.59s)
        --- PASS: TestDNSProviders/example.com/44:SSHFP:SSHFP_change_fingerprint_and_type (1.20s)
        --- PASS: TestDNSProviders/example.com/45:TLSA_***SKIPPED(CanUseTLSA_not_supported)***:Empty (0.71s)
        --- PASS: TestDNSProviders/example.com/46:DS_***SKIPPED(CanUseDS_not_supported)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/47:DS_(children_only)_***SKIPPED(CanUseDSForChildren_not_supported)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/48:DS_(children_only)_CLOUDNS_***SKIPPED(CanUseDSForChildren_not_supported)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/49:DHCID_***SKIPPED(CanUseDHCID_not_supported)***:Empty (0.43s)
        --- PASS: TestDNSProviders/example.com/50:DNAME_***SKIPPED(CanUseDNAME_not_supported)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/51:DNSKEY_***SKIPPED(CanUseDNSKEY_not_supported)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#37 (0.38s)
        --- PASS: TestDNSProviders/example.com/52:ALIAS_on_apex:ALIAS_at_root (6.42s)
        --- PASS: TestDNSProviders/example.com/52:ALIAS_on_apex:change_it (1.55s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#38 (0.70s)
        --- PASS: TestDNSProviders/example.com/53:ALIAS_to_nonfqdn:ALIAS_at_root (10.56s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#39 (1.11s)
        --- PASS: TestDNSProviders/example.com/54:ALIAS_on_subdomain:ALIAS_at_subdomain (10.94s)
        --- PASS: TestDNSProviders/example.com/54:ALIAS_on_subdomain:change_it (1.51s)
        --- PASS: TestDNSProviders/example.com/55:AZURE_ALIAS_A_***SKIPPED(CanUseAzureAlias_not_supported)***:Empty (10.00s)
        --- PASS: TestDNSProviders/example.com/56:AZURE_ALIAS_CNAME_***SKIPPED(CanUseAzureAlias_not_supported)***:Empty (0.67s)
        --- PASS: TestDNSProviders/example.com/57:R53_ALIAS2_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.53s)
        --- PASS: TestDNSProviders/example.com/58:R53_ALIAS_ORDER_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.40s)
        --- PASS: TestDNSProviders/example.com/59:R53_ALIAS_CNAME_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.45s)
        --- PASS: TestDNSProviders/example.com/60:R53_ALIAS_Loop_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/61:R53_alias_pre-existing_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/62:R53_alias_evaluate_target_health_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.47s)
        --- PASS: TestDNSProviders/example.com/63:R53_B3493_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/64:R53_B3493_REV_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/65:CF_REDIRECT_CONVERT_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/66:CLOUDFLAREAPI_SINGLE_REDIRECT_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.45s)
        --- PASS: TestDNSProviders/example.com/67:CF_PROXY_A_create_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/68:CF_PROXY_A_off_to_on_***SKIPPED(disabled_by_only)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/69:CF_PROXY_A_on_to_off_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/70:CF_PROXY_CNAME_create_***SKIPPED(disabled_by_only)***:Empty (0.46s)
        --- PASS: TestDNSProviders/example.com/71:CF_PROXY_CNAME_off_to_on_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/72:CF_PROXY_CNAME_on_to_off_***SKIPPED(disabled_by_only)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/73:CF_CNAME_FLATTEN_create_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.82s)
        --- PASS: TestDNSProviders/example.com/74:CF_CNAME_FLATTEN_off_to_on_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/75:CF_CNAME_FLATTEN_on_to_off_***SKIPPED(excluded_by_alltrue([false]))***:Empty (1.75s)
        --- PASS: TestDNSProviders/example.com/76:CF_COMMENT_create_***SKIPPED(disabled_by_only)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/77:CF_TAGS_create_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.46s)
        --- PASS: TestDNSProviders/example.com/78:CF_WORKER_ROUTE_***SKIPPED(disabled_by_only)***:Empty (0.43s)
        --- PASS: TestDNSProviders/example.com/79:ADGUARDHOME_A_PASSTHROUGH_***SKIPPED(disabled_by_only)***:Empty (0.51s)
        --- PASS: TestDNSProviders/example.com/80:ADGUARDHOME_AAAA_PASSTHROUGH_***SKIPPED(disabled_by_only)***:Empty (0.46s)
        --- PASS: TestDNSProviders/example.com/81:VERCEL_CAA_whitespace_-_cansignhttpexchanges_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#40 (0.50s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:Create_some_records (18.35s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_label (0.88s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS (0.88s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_label,type (0.75s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS#01 (0.83s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_label,type,target (0.74s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS#02 (0.83s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_type (0.74s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS#03 (0.83s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_type,target (0.75s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS#04 (0.83s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_target (0.75s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS#05 (0.84s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_manytypes (0.85s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS#06 (3.33s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:ignore_label,type,target=* (0.87s)
        --- PASS: TestDNSProviders/example.com/82:IGNORE_main:VERIFY_PREVIOUS#07 (0.88s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#41 (7.91s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:Create_some_records (3.30s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:apex_label (0.82s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:VERIFY_PREVIOUS (0.96s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:apex_label,type (1.15s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:VERIFY_PREVIOUS#01 (0.90s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:apex_label,type,target (0.86s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:VERIFY_PREVIOUS#02 (0.87s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:apex_type (0.93s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:VERIFY_PREVIOUS#03 (0.84s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:apex_type,target (0.83s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:VERIFY_PREVIOUS#04 (0.76s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:apex_target (0.85s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:VERIFY_PREVIOUS#05 (0.87s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:apex_manytypes (0.85s)
        --- PASS: TestDNSProviders/example.com/83:IGNORE_apex:VERIFY_PREVIOUS#06 (0.86s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#42 (3.29s)
        --- PASS: TestDNSProviders/example.com/84:IGNORE_unsafe:Create_some_records (3.54s)
        --- PASS: TestDNSProviders/example.com/84:IGNORE_unsafe:ignore_unsafe_apex (0.88s)
        --- PASS: TestDNSProviders/example.com/84:IGNORE_unsafe:VERIFY_PREVIOUS (0.87s)
        --- PASS: TestDNSProviders/example.com/84:IGNORE_unsafe:ignore_unsafe_label (0.86s)
        --- PASS: TestDNSProviders/example.com/84:IGNORE_unsafe:VERIFY_PREVIOUS#01 (0.82s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#43 (1.67s)
        --- PASS: TestDNSProviders/example.com/85:IGNORE_wilds:Create_some_records (5.76s)
        --- PASS: TestDNSProviders/example.com/85:IGNORE_wilds:ignore_label=foo.* (0.83s)
        --- PASS: TestDNSProviders/example.com/85:IGNORE_wilds:VERIFY_PREVIOUS (0.74s)
        --- PASS: TestDNSProviders/example.com/85:IGNORE_wilds:ignore_label=foo.bat,type (0.83s)
        --- PASS: TestDNSProviders/example.com/85:IGNORE_wilds:VERIFY_PREVIOUS#01 (0.75s)
        --- PASS: TestDNSProviders/example.com/85:IGNORE_wilds:ignore_target=*.domain (0.83s)
        --- PASS: TestDNSProviders/example.com/85:IGNORE_wilds:VERIFY_PREVIOUS#02 (0.88s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#44 (15.89s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:Create_some_records (30.83s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:IGNORE_change_ByZone (1.21s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:VERIFY_PREVIOUS (0.82s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:IGNORE_change_ByLabel (1.41s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:VERIFY_PREVIOUS#01 (0.88s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:IGNORE_change_ByRecordSet (8.39s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:VERIFY_PREVIOUS#02 (0.77s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:IGNORE_change_ByRecord (1.34s)
        --- PASS: TestDNSProviders/example.com/86:IGNORE_with_modify:VERIFY_PREVIOUS#03 (2.11s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#45 (21.46s)
        --- PASS: TestDNSProviders/example.com/87:IGNORE_TARGET_b2285:Create_some_records (2.36s)
        --- PASS: TestDNSProviders/example.com/87:IGNORE_TARGET_b2285:Add_a_new_record_-_ignoring_test.foo.com. (0.50s)
        --- PASS: TestDNSProviders/example.com/87:IGNORE_TARGET_b2285:VERIFY_PREVIOUS (0.84s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#46 (12.21s)
        --- PASS: TestDNSProviders/example.com/88:IGNORE_everything_b2822:Create_some_records (11.28s)
        --- PASS: TestDNSProviders/example.com/88:IGNORE_everything_b2822:ignore_them_all (0.95s)
        --- PASS: TestDNSProviders/example.com/88:IGNORE_everything_b2822:VERIFY_PREVIOUS (1.23s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#47 (1.92s)
        --- PASS: TestDNSProviders/example.com/89:IGNORE_w/change_b3227:Create_some_records (3.34s)
        --- PASS: TestDNSProviders/example.com/89:IGNORE_w/change_b3227:ignore (1.04s)
        --- PASS: TestDNSProviders/example.com/89:IGNORE_w/change_b3227:VERIFY_PREVIOUS (0.75s)
        --- PASS: TestDNSProviders/example.com/89:IGNORE_w/change_b3227:Verify_nothing_changed (0.82s)
        --- PASS: TestDNSProviders/example.com/89:IGNORE_w/change_b3227:VERIFY_PREVIOUS#01 (0.75s)
        --- PASS: TestDNSProviders/example.com/89:IGNORE_w/change_b3227:ignore_with_change (1.17s)
        --- PASS: TestDNSProviders/example.com/89:IGNORE_w/change_b3227:VERIFY_PREVIOUS#02 (0.75s)
        --- PASS: TestDNSProviders/example.com/90:structured_TXT_***SKIPPED(disabled_by_only)***:Empty (0.99s)
        --- PASS: TestDNSProviders/example.com/91:structured_TXT_as_native_records_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/92:CLOUDNS_geodns_tests_***SKIPPED(disabled_by_only)***:Empty (0.38s)
        --- PASS: TestDNSProviders/example.com/93:PORKBUN_URLFWD_tests_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/94:GCORE_metadata_tests_***SKIPPED(disabled_by_only)***:Empty (0.45s)
        --- PASS: TestDNSProviders/example.com/95:NAMECHEAP_url_redirect_records_***SKIPPED(disabled_by_only)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/96:OPENPGPKEY_***SKIPPED(CanUseOPENPGPKEY_not_supported)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/97:SMIMEA_***SKIPPED(CanUseSMIMEA_not_supported)***:Empty (0.37s)
        --- PASS: TestDNSProviders/example.com/98:Bunny_DNS_Pull_Zone_***SKIPPED(disabled_by_only)***:Empty (1.68s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#48 (0.38s)
        --- PASS: TestDNSProviders/example.com/99:HEDNS_DYNAMIC_A_lifecycle:Create_dynamic_A (7.35s)
        --- PASS: TestDNSProviders/example.com/99:HEDNS_DYNAMIC_A_lifecycle:Change_target_preserves_dynamic (1.20s)
        --- PASS: TestDNSProviders/example.com/99:HEDNS_DYNAMIC_A_lifecycle:Turn_off_dynamic (11.54s)
        --- PASS: TestDNSProviders/example.com/99:HEDNS_DYNAMIC_A_lifecycle:Turn_on_dynamic (1.19s)
        --- PASS: TestDNSProviders/example.com/99:HEDNS_DYNAMIC_A_lifecycle:Inherit_dynamic_on_modify (1.23s)
        --- PASS: TestDNSProviders/example.com/99:HEDNS_DYNAMIC_A_lifecycle:Add_static_record (1.13s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#49 (1.11s)
        --- PASS: TestDNSProviders/example.com/100:HEDNS_DYNAMIC_AAAA+TXT:Create_dynamic_AAAA (1.14s)
        --- PASS: TestDNSProviders/example.com/100:HEDNS_DYNAMIC_AAAA+TXT:Change_dynamic_AAAA_target (1.17s)
        --- PASS: TestDNSProviders/example.com/100:HEDNS_DYNAMIC_AAAA+TXT:Create_dynamic_TXT (1.43s)
        --- PASS: TestDNSProviders/example.com/100:HEDNS_DYNAMIC_AAAA+TXT:Turn_off_dynamic_TXT (1.19s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#50 (9.13s)
        --- PASS: TestDNSProviders/example.com/101:HEDNS_DDNS_KEY:Create_A_with_DDNS_key_(implicit_dynamic) (1.53s)
        --- PASS: TestDNSProviders/example.com/101:HEDNS_DDNS_KEY:Change_target_+_key (1.40s)
        --- PASS: TestDNSProviders/example.com/101:HEDNS_DDNS_KEY:Create_AAAA_with_DDNS_key (10.18s)
        --- PASS: TestDNSProviders/example.com/101:HEDNS_DDNS_KEY:Change_AAAA_target_+_key (1.44s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#51 (0.74s)
        --- PASS: TestDNSProviders/example.com/102:HEDNS_DYNAMIC_mixed_records:Create_mix_of_dynamic_and_static (1.52s)
        --- PASS: TestDNSProviders/example.com/102:HEDNS_DYNAMIC_mixed_records:Modify_only_the_static_record (18.29s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#52 (1.05s)
        --- PASS: TestDNSProviders/example.com/103:final:final (1.24s)
        --- PASS: TestDNSProviders/example.com/Clean_Slate:Empty#53 (1.45s)
        --- PASS: TestDNSProviders/example.com/104:final:final (10.52s)
=== RUN   TestDualProviders
Testing Profile="HEDNS" (TYPE="HEDNS")
    provider_test.go:50: Clearing everything
    provider_test.go:44: #1:
        - DELETE final.example.com TXT "TestDNSProviders was successful!" ttl=300
    provider_test.go:57: Adding test nameservers
    provider_test.go:44: #1:
        + CREATE example.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        + CREATE example.com NS ns2.example.com. ttl=300
    provider_test.go:60: Running again to ensure stability
    provider_test.go:76: Removing test nameservers
    provider_test.go:44: #1:
        - DELETE example.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        - DELETE example.com NS ns2.example.com. ttl=300
--- PASS: TestDualProviders (11.24s)
=== RUN   TestNameserverDots
Testing Profile="HEDNS" (TYPE="HEDNS")
=== RUN   TestNameserverDots/No_trailing_dot_in_nameserver
--- PASS: TestNameserverDots (0.20s)
    --- PASS: TestNameserverDots/No_trailing_dot_in_nameserver (0.00s)
=== RUN   TestDuplicateNameservers
Testing Profile="HEDNS" (TYPE="HEDNS")
    provider_test.go:145: Skipping. Deduplication logic is not implemented for this provider.
--- SKIP: TestDuplicateNameservers (0.19s)
PASS
ok      github.com/StackExchange/dnscontrol/v4/integrationTest  1053.995s
```
</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.