From b82e7914838f7aa5ee6dcb657dd9735b02f703c9 Mon Sep 17 00:00:00 2001 From: Rawlin Peters Date: Thu, 29 Nov 2018 10:09:31 -0700 Subject: [PATCH] Fix ordering of DS matchlists to match the Perl The DS matchlist needs to be ordered by the set_number just like it was done in the Perl. There are clients that depend on that specific ordering, e.g. Traffic Portal which uses the first exampleURL to create the hostName field of an "add cert to DS" request. --- .../deliveryservice/deliveryservicesv13.go | 1 + .../deliveryservicesv13_test.go | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go index c6be2d15e8..1ef12b705e 100644 --- a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go +++ b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13.go @@ -752,6 +752,7 @@ JOIN deliveryservice_regex as dsr ON dsr.regex = r.id JOIN deliveryservice as ds on ds.id = dsr.deliveryservice JOIN type as t ON r.type = t.id WHERE ds.xml_id = ANY($1) +ORDER BY dsr.set_number ` rows, err := tx.Query(q, pq.Array(dses)) if err != nil { diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13_test.go b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13_test.go index f3d495ea46..83942653cc 100644 --- a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13_test.go +++ b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservicesv13_test.go @@ -25,8 +25,31 @@ import ( "github.com/apache/trafficcontrol/lib/go-tc" "github.com/apache/trafficcontrol/lib/go-util" + + "github.com/jmoiron/sqlx" + "gopkg.in/DATA-DOG/go-sqlmock.v1" ) +func TestGetDeliveryServicesMatchLists(t *testing.T) { + // test to make sure that the DS matchlists query orders by set_number + mockDB, mock, err := sqlmock.New() + if err != nil { + t.Fatalf("an error '%s' was not expected when opening a stub database connection", err) + } + defer mockDB.Close() + + db := sqlx.NewDb(mockDB, "sqlmock") + defer db.Close() + + mock.ExpectBegin() + mock.ExpectQuery("SELECT .+ ORDER BY dsr.set_number") + + GetDeliveryServicesMatchLists([]string{"foo"}, db.MustBegin().Tx) + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("expectations were not met: %s", err) + } +} + func TestMakeExampleURLs(t *testing.T) { expected := []string{ `http://routing-name.ds-name.domain-name.invalid`,