# 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.

```text
#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/StackExchange/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.

```text
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.
