# TXT record testing

## TXT record testing

We recently discovered a strange bug with processing TXT records and double-quotes. Sadly we haven't been able to determine a way to test this automatically. Therefore, I've written up this methodology.

## The problem

The problem relates to TXT records that have a string with quotes in them.

If a user creates a TXT record whose contents are `"something"` (yes, with double quotes), some APIs get confused.

This bug is most likely to appear in a provider that uses `RecordConfig.PopulateFromString()` (see `models/t_parse.go`) to create TXT records. That function assumes the string should always have the quotes stripped, though it is more likely that the string should be taken verbatim.

## The test

To complete this test, you will need a test domain that you can add records to. It won't be modified otherwise.

This bug has to do with double-quotes at the start and end of TXT records. If your provider doesn't permit double-quotes in TXT records (you'd be surprised!) you don't have to worry about this bug because those records are banned in your `auditrecords.go` file.

### Step 1: Create the test records

Log into your DNS provider's web UI (portal) and create these 4 TXT records. (Don't use DNSControl!) Yes, include the double-quotes on test 2 and 3!

| Hostname | TXT     |
| -------- | ------- |
| t0       | test0   |
| t1       | test1   |
| t2       | "test2" |
| t3       | "test3" |

### Step 2: Update `dnsconfig.js`

Now in your `dnsconfig.js` file, add these records to the domain:

```
TXT("t0", "test0"),
TXT("t1", "\"test1\""),
TXT("t2", "test2"),
TXT("t3", "\"test3\""),
```

### Step 3: Preview

When you do a `dnscontrol preview`, you should see changes for t1 and t2.

```
#1: MODIFY TXT t1.example.com: ("test1" ttl=1) -> ("\"test1\"" ttl=1)
#2: MODIFY TXT t2.example.com: ("\"test2\"" ttl=1) -> ("test2" ttl=1)
```

If you don't see those changes, that's a bug. For example, we found that Cloudflare left t2 alone but would try to add double-quotes to t3! This was fixed in [PR#1543](https://github.com/DNSControl/dnscontrol/pull/1543).

### Step 4: Push

Let's assume you DO see the changes. Push them using `dnscontrol push` then check the webui to see that the changes are correct.

```
2 corrections
#1: MODIFY TXT t1.stackoverflow.help: ("test1" ttl=1) -> ("\"test1\"" ttl=1)
SUCCESS!
#2: MODIFY TXT t2.stackoverflow.help: ("\"test2\"" ttl=1) -> ("test2" ttl=1)
SUCCESS!
```

Refresh your provider's web UI and you should see the changes as expected: t1 should have double-quotes and t2 shouldn't. If the change wasn't correctly done, that's a bug.

### Step 5: That's it!

Remove the lines from `dnsconfig.js` and run `dnscontrol push` to clean up.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dnscontrol.org/developer-info/testing-txt-records.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
