Skip to content

Commit c97b312

Browse files
integration: Move test_order_finalize_early to the Go tests (letsencrypt#8258)
Hyrum’s Law strikes again: our Python integration tests were implicitly relying on behavior that was changed upstream in Certbot’s ACME client (see certbot/certbot#10239). To ensure continued coverage, replicate this test in our Go integration test suite.
1 parent aa3c9f0 commit c97b312

File tree

2 files changed

+45
-21
lines changed

2 files changed

+45
-21
lines changed

test/integration/errors_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ package integration
55
import (
66
"bytes"
77
"crypto"
8+
"crypto/ecdsa"
9+
"crypto/elliptic"
810
"crypto/rand"
911
"encoding/base64"
1012
"encoding/json"
13+
"errors"
1114
"fmt"
1215
"io"
1316
"net/http"
@@ -277,3 +280,45 @@ func TestBadSignatureAlgorithm(t *testing.T) {
277280
t.Error("problem document MUST contain acceptable algorithms, got none")
278281
}
279282
}
283+
284+
// TestOrderFinalizeEarly tests that finalizing an order before it is fully
285+
// authorized results in an orderNotReady error.
286+
func TestOrderFinalizeEarly(t *testing.T) {
287+
t.Parallel()
288+
289+
client, err := makeClient()
290+
if err != nil {
291+
t.Fatalf("creating acme client: %s", err)
292+
}
293+
294+
idents := []acme.Identifier{{Type: "dns", Value: randomDomain(t)}}
295+
296+
order, err := client.Client.NewOrder(client.Account, idents)
297+
if err != nil {
298+
t.Fatalf("creating order: %s", err)
299+
}
300+
key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
301+
if err != nil {
302+
t.Fatalf("generating key: %s", err)
303+
}
304+
csr, err := makeCSR(key, idents, false)
305+
if err != nil {
306+
t.Fatalf("generating CSR: %s", err)
307+
}
308+
309+
order, err = client.Client.FinalizeOrder(client.Account, order, csr)
310+
if err == nil {
311+
t.Fatal("expected finalize to fail, but got success")
312+
}
313+
var prob acme.Problem
314+
ok := errors.As(err, &prob)
315+
if !ok {
316+
t.Fatalf("expected error to be of type acme.Problem, got: %T", err)
317+
}
318+
if prob.Type != "urn:ietf:params:acme:error:orderNotReady" {
319+
t.Errorf("expected problem type 'urn:ietf:params:acme:error:orderNotReady', got: %s", prob.Type)
320+
}
321+
if order.Status != "pending" {
322+
t.Errorf("expected order status to be pending, got: %s", order.Status)
323+
}
324+
}

test/v2_integration.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -647,27 +647,6 @@ def test_order_reuse_failed_authz():
647647
finally:
648648
cleanup()
649649

650-
def test_order_finalize_early():
651-
"""
652-
Test that finalizing an order before its fully authorized results in the
653-
order having an error set and the status being invalid.
654-
"""
655-
# Create a client
656-
client = chisel2.make_client(None)
657-
658-
# Create a random domain and a csr
659-
domains = [ random_domain() ]
660-
csr_pem = chisel2.make_csr(domains)
661-
662-
# Create an order for the domain
663-
order = client.new_order(csr_pem)
664-
665-
deadline = datetime.datetime.now() + datetime.timedelta(seconds=5)
666-
667-
# Finalizing an order early should generate an orderNotReady error.
668-
chisel2.expect_problem("urn:ietf:params:acme:error:orderNotReady",
669-
lambda: client.finalize_order(order, deadline))
670-
671650
def test_only_return_existing_reg():
672651
client = chisel2.uninitialized_client()
673652

0 commit comments

Comments
 (0)