This is an automated email from the ASF dual-hosted git repository.

zrhoffman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 6fe2892  Fix t3c reload (#5873)
6fe2892 is described below

commit 6fe2892aa67b15222f0e84ea8efab0b9ab53e23e
Author: Robert O Butts <[email protected]>
AuthorDate: Fri May 21 09:07:08 2021 -0600

    Fix t3c reload (#5873)
    
    * Fix t3c not reloading
    
    Bug was the data of what files and packages were changed not being
    set. This is a critical part of the t3c-reload call, Guessing it
    disappearing was a merge failure from the reload PR being so old.
    
    * Add t3c reload test
    
    * Changed t3c test fixture ATS version to "CHANGEME"
    
    Also changes the baseline-config as necessary. I confirmed the change
    is correct, the previous was being caused by the ATS version being
    detected as 5, confirmed in the test log as:
    "Unsupport version of ats found 5"
    from lib/go-atscfg/remapdotconfig.go
---
 cache-config/t3c-apply/torequest/torequest.go      |  2 +
 .../ort-tests/baseline-configs/remap.config        |  4 +-
 .../ort-tests/t3c-apply-unset-update_test.go       | 30 +++++++++-
 ...ply-unset-update_test.go => t3c-reload_test.go} | 70 ++++++----------------
 cache-config/testing/ort-tests/tc-fixtures.json    |  2 +-
 5 files changed, 52 insertions(+), 56 deletions(-)

diff --git a/cache-config/t3c-apply/torequest/torequest.go 
b/cache-config/t3c-apply/torequest/torequest.go
index 627ec0a..8424446 100644
--- a/cache-config/t3c-apply/torequest/torequest.go
+++ b/cache-config/t3c-apply/torequest/torequest.go
@@ -488,6 +488,7 @@ func (r *TrafficOpsReq) replaceCfgFile(cfg *ConfigFile) 
error {
                return errors.New("Failed to move temp '" + tmpFileName + "' to 
real '" + cfg.Path + "': " + err.Error())
        }
        cfg.ChangeApplied = true
+       r.changedFiles = append(r.changedFiles, cfg.Name)
 
        r.RemapConfigReload = cfg.RemapPluginConfig ||
                cfg.Name == "remap.config" ||
@@ -998,6 +999,7 @@ func (r *TrafficOpsReq) ProcessPackages() error {
                                                return errors.New("Unable to 
install " + pkg + " : " + err.Error())
                                        } else if result == true {
                                                r.pkgs[pkg] = true
+                                               r.installedPkgs[pkg] = 
struct{}{}
                                                log.Infof("Package %s was 
installed\n", pkg)
                                        }
                                }
diff --git a/cache-config/testing/ort-tests/baseline-configs/remap.config 
b/cache-config/testing/ort-tests/baseline-configs/remap.config
index b20e8fb..238313c 100644
--- a/cache-config/testing/ort-tests/baseline-configs/remap.config
+++ b/cache-config/testing/ort-tests/baseline-configs/remap.config
@@ -1,3 +1,3 @@
 # DO NOT EDIT - Generated for atlanta-edge-03 by  () on Fri Nov 13 18:49:10 
UTC 2020
-map    http://atlanta-edge-03.ds-top.test.cdn1.net/     
http://origin.topology.example.net/ @plugin=header_rewrite.so 
@pparam=dscp/set_dscp_40.config @plugin=header_rewrite.so 
@pparam=hdr_rw_first_ds-top.config  # topology 'mso-topology'
-map    https://atlanta-edge-03.ds-top.test.cdn1.net/     
http://origin.topology.example.net/ @plugin=header_rewrite.so 
@pparam=dscp/set_dscp_40.config @plugin=header_rewrite.so 
@pparam=hdr_rw_first_ds-top.config  # topology 'mso-topology'
+map    http://atlanta-edge-03.ds-top.test.cdn1.net/     
http://origin.topology.example.net/ @plugin=header_rewrite.so 
@pparam=dscp/set_dscp_40.config @plugin=header_rewrite.so 
@pparam=hdr_rw_first_ds-top.config  @plugin=cachekey.so @pparam=--separator= 
@pparam=--remove-all-params=true @pparam=--remove-path=true 
@pparam=--capture-prefix-uri=/^([^?]*)/$1/ # topology 'mso-topology'
+map    https://atlanta-edge-03.ds-top.test.cdn1.net/     
http://origin.topology.example.net/ @plugin=header_rewrite.so 
@pparam=dscp/set_dscp_40.config @plugin=header_rewrite.so 
@pparam=hdr_rw_first_ds-top.config  @plugin=cachekey.so @pparam=--separator= 
@pparam=--remove-all-params=true @pparam=--remove-path=true 
@pparam=--capture-prefix-uri=/^([^?]*)/$1/ # topology 'mso-topology'
\ No newline at end of file
diff --git a/cache-config/testing/ort-tests/t3c-apply-unset-update_test.go 
b/cache-config/testing/ort-tests/t3c-apply-unset-update_test.go
index 68dd43e..efbd90e 100644
--- a/cache-config/testing/ort-tests/t3c-apply-unset-update_test.go
+++ b/cache-config/testing/ort-tests/t3c-apply-unset-update_test.go
@@ -75,13 +75,39 @@ func TestT3cUnsetsUpdateFlag(t *testing.T) {
                        }
                }
 
-               _, _ = t3cUpdateUnsetFlag(cacheHostName, "syncds")
+               // traffic_ctl doesn't work because the test framework doesn't 
currently run ATS.
+               // So, temporarily replace it with a no-op, so t3c-apply gets 
far enough to un-set the update flag.
+               // TODO: remove this when running ATS is added to the test 
framework
+
+               if err := os.Rename(`/opt/trafficserver/bin/traffic_ctl`, 
`/opt/trafficserver/bin/traffic_ctl.real`); err != nil {
+                       t.Fatal("temporarily moving traffic_ctl: " + 
err.Error())
+               }
+
+               fi, err := os.OpenFile(`/opt/trafficserver/bin/traffic_ctl`, 
os.O_RDWR|os.O_CREATE, 755)
+               if err != nil {
+                       t.Fatal("creating temp no-op traffic_ctl file: " + 
err.Error())
+               }
+               if _, err := fi.WriteString(`#!/usr/bin/env bash` + "\n"); err 
!= nil {
+                       fi.Close()
+                       t.Fatal("writing temp no-op traffic_ctl file: " + 
err.Error())
+               }
+               fi.Close()
+
+               defer func() {
+                       if err := 
os.Rename(`/opt/trafficserver/bin/traffic_ctl.real`, 
`/opt/trafficserver/bin/traffic_ctl`); err != nil {
+                               t.Fatal("moving real traffic_ctl back: " + 
err.Error())
+                       }
+               }()
+
+               stdOut, _ := t3cUpdateUnsetFlag(cacheHostName, "syncds")
                // Ignore the exit code error for now, because the ORT 
Integration Test Framework doesn't currently start ATS.
                // TODO check err, after running ATS is added to the tests.
                // if err != nil {
                //      t.Fatalf("t3c syncds failed: %v\n", err)
                // }
 
+               t.Logf("TestT3cTOUpdates t3cUpdateUnsetFlag stdout '''%v'''", 
stdOut)
+
                {
                        // verify update status after syncds is now false
 
@@ -102,7 +128,7 @@ func TestT3cUnsetsUpdateFlag(t *testing.T) {
                        }
                }
        })
-       fmt.Println("------------- End of TestT3cTOUpdates tests 
---------------")
+       fmt.Println("------------- End of TestT3cUnsetsUpdateFlag tests 
---------------")
 }
 
 func t3cUpdateUnsetFlag(host string, runMode string) (string, int) {
diff --git a/cache-config/testing/ort-tests/t3c-apply-unset-update_test.go 
b/cache-config/testing/ort-tests/t3c-reload_test.go
similarity index 54%
copy from cache-config/testing/ort-tests/t3c-apply-unset-update_test.go
copy to cache-config/testing/ort-tests/t3c-reload_test.go
index 68dd43e..ad2e868 100644
--- a/cache-config/testing/ort-tests/t3c-apply-unset-update_test.go
+++ b/cache-config/testing/ort-tests/t3c-reload_test.go
@@ -15,34 +15,34 @@ package orttest
 */
 
 import (
-       "encoding/json"
-       "fmt"
        "os"
        "path/filepath"
+       "strings"
        "testing"
 
        "github.com/apache/trafficcontrol/cache-config/t3cutil"
        "github.com/apache/trafficcontrol/cache-config/testing/ort-tests/tcdata"
-       "github.com/apache/trafficcontrol/lib/go-tc"
 )
 
-func TestT3cUnsetsUpdateFlag(t *testing.T) {
-       fmt.Println("------------- Starting TestT3cUnsetsUpdateFlag tests 
---------------")
+func TestT3cReload(t *testing.T) {
+       t.Logf("------------- Starting TestT3cReload ---------------")
        tcd.WithObjs(t, []tcdata.TCObj{
                tcdata.CDNs, tcdata.Types, tcdata.Tenants, tcdata.Parameters,
                tcdata.Profiles, tcdata.ProfileParameters, tcdata.Statuses,
                tcdata.Divisions, tcdata.Regions, tcdata.PhysLocations,
                tcdata.CacheGroups, tcdata.Servers, tcdata.Topologies,
                tcdata.DeliveryServices}, func() {
+               t.Logf("------------- Start TestT3cReload Core ---------------")
 
-               const cacheHostName = `atlanta-edge-03`
-               const cmdUpdateStatus = `update-status`
+               cacheHostName := "atlanta-edge-03"
 
                t.Logf("DEBUG TestT3cReload calling badass")
-               if stdOut, exitCode := t3cUpdateUnsetFlag(cacheHostName, 
"badass"); exitCode != 0 {
+               if stdOut, exitCode := t3cUpdateReload(cacheHostName, 
"badass"); exitCode != 0 {
                        t.Fatalf("ERROR: t3c badass failed: code '%v' output 
'%v'\n", exitCode, stdOut)
                }
 
+               t.Logf("DEBUG TestT3cReload deleting file")
+
                // delete a file that we know should trigger a reload.
                fileNameToRemove := filepath.Join(test_config_dir, 
"hdr_rw_first_ds-top.config")
                if err := os.Remove(fileNameToRemove); err != nil {
@@ -51,61 +51,29 @@ func TestT3cUnsetsUpdateFlag(t *testing.T) {
 
                t.Logf("DEBUG TestT3cReload setting upate flag")
                // set the update flag, so syncds will run
-               if err := ExecTOUpdater(cacheHostName, false, true); err != nil 
{
+               if err := ExecTOUpdater("atlanta-edge-03", false, true); err != 
nil {
                        t.Fatalf("t3c-update failed: %v\n", err)
                }
 
-               {
-                       // verify update status is now true
-
-                       output, err := runRequest(cacheHostName, 
cmdUpdateStatus)
-                       if err != nil {
-                               t.Fatalf("ERROR: to_requester run failed: 
%v\n", err)
-                       }
-                       serverStatus := tc.ServerUpdateStatus{}
-                       if err = json.Unmarshal([]byte(output), &serverStatus); 
err != nil {
-                               t.Fatalf("ERROR unmarshalling json output: " + 
err.Error())
-                       }
-                       if serverStatus.HostName != cacheHostName {
-                               t.Fatalf("expected request update-status host 
'%v' actual %v", cacheHostName, serverStatus.HostName)
-                       } else if serverStatus.RevalPending {
-                               t.Fatal("expected RevalPending false after 
update")
-                       } else if !serverStatus.UpdatePending {
-                               t.Fatal("expected UpdatePending true after 
update")
-                       }
-               }
-
-               _, _ = t3cUpdateUnsetFlag(cacheHostName, "syncds")
+               t.Logf("DEBUG TestT3cReload calling syncds")
+               stdOut, _ := t3cUpdateReload(cacheHostName, "syncds")
                // Ignore the exit code error for now, because the ORT 
Integration Test Framework doesn't currently start ATS.
                // TODO check err, after running ATS is added to the tests.
                // if err != nil {
                //      t.Fatalf("t3c syncds failed: %v\n", err)
                // }
 
-               {
-                       // verify update status after syncds is now false
-
-                       output, err := runRequest(cacheHostName, 
cmdUpdateStatus)
-                       if err != nil {
-                               t.Fatalf("t3c-request failed: %v\n", err)
-                       }
-                       serverStatus := tc.ServerUpdateStatus{}
-                       if err = json.Unmarshal([]byte(output), &serverStatus); 
err != nil {
-                               t.Fatalf("unmarshalling request update-status 
json: " + err.Error())
-                       }
-                       if serverStatus.HostName != cacheHostName {
-                               t.Errorf("expected update-status host '%v' 
actual %v", cacheHostName, serverStatus.HostName)
-                       } else if serverStatus.RevalPending {
-                               t.Error("expected RevalPending false after 
syncds run")
-                       } else if serverStatus.UpdatePending {
-                               t.Error("expected UpdatePending false after 
syncds run")
-                       }
+               t.Logf("DEBUG TestT3cReload looking for reload string")
+               if !strings.Contains(stdOut, `Running 'traffic_ctl config 
reload' now`) {
+                       t.Errorf("expected t3c to do a reload after adding a 
header rewrite file, actual: '''%v'''\n", stdOut)
                }
+
+               t.Logf("------------- End TestT3cReload Core ---------------")
        })
-       fmt.Println("------------- End of TestT3cTOUpdates tests 
---------------")
+       t.Logf("------------- End of TestT3cReload ---------------")
 }
 
-func t3cUpdateUnsetFlag(host string, runMode string) (string, int) {
+func t3cUpdateReload(host string, runMode string) (string, int) {
        args := []string{
                "apply",
                "--traffic-ops-insecure=true",
@@ -120,7 +88,7 @@ func t3cUpdateUnsetFlag(host string, runMode string) 
(string, int) {
                "--log-location-info=stdout",
                "--log-location-debug=test.log",
                "--omit-via-string-release=true",
-               "--git=no",
+               "--git=" + "yes",
                "--run-mode=" + runMode,
        }
        stdOut, _, exitCode := t3cutil.Do("t3c", args...) // should be no 
stderr, we told it to log to stdout
diff --git a/cache-config/testing/ort-tests/tc-fixtures.json 
b/cache-config/testing/ort-tests/tc-fixtures.json
index 8a7048f..8abfc8c 100644
--- a/cache-config/testing/ort-tests/tc-fixtures.json
+++ b/cache-config/testing/ort-tests/tc-fixtures.json
@@ -1761,7 +1761,7 @@
                      "lastUpdated": "2018-01-19T19:01:21.499423+00:00",
                      "name": "trafficserver",
                      "secure": true,
-                     "value": "*"
+                     "value": "CHANGEME"
                      },
                 {
                     "configFile": "empty-file.config",

Reply via email to