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 c90a2bc  Fix t3c apply to pass full path to check-reload (#5883)
c90a2bc is described below

commit c90a2bc3a415240d916479d6e0c1447629b5ac7f
Author: Robert O Butts <[email protected]>
AuthorDate: Mon May 24 16:30:35 2021 -0600

    Fix t3c apply to pass full path to check-reload (#5883)
    
    Fixes t3c-apply not reloading for any file in etc/trafficserver, like
    remap.config or parent.config.
---
 cache-config/t3c-apply/torequest/cmd.go           |   2 +
 cache-config/t3c-apply/torequest/torequest.go     |   2 +-
 cache-config/testing/ort-tests/t3c-reload_test.go | 158 +++++++++++++++++-----
 cache-config/testing/ort-tests/t3c_mode_test.go   |  27 +++-
 cache-config/testing/ort-tests/tc-fixtures.json   |  12 ++
 5 files changed, 161 insertions(+), 40 deletions(-)

diff --git a/cache-config/t3c-apply/torequest/cmd.go 
b/cache-config/t3c-apply/torequest/cmd.go
index 3c03213..b96d4f8 100644
--- a/cache-config/t3c-apply/torequest/cmd.go
+++ b/cache-config/t3c-apply/torequest/cmd.go
@@ -289,6 +289,8 @@ func checkRefs(cfg config.Cfg, cfgFile []byte, filesAdding 
[]string) error {
 
 // checkReload is a helper for the sub-command t3c-check-reload.
 func checkReload(mode t3cutil.Mode, pluginPackagesInstalled []string, 
changedConfigFiles []string) (t3cutil.ServiceNeeds, error) {
+       log.Infof("t3c-check-reload calling with mode '%v' 
pluginPackagesInstalled '%v' changedConfigFiles '%v'\n", mode, 
pluginPackagesInstalled, changedConfigFiles)
+
        stdOut, stdErr, code := t3cutil.Do(`t3c`, `check`, `reload`,
                "--run-mode="+mode.String(),
                
"--plugin-packages-installed="+strings.Join(pluginPackagesInstalled, ","),
diff --git a/cache-config/t3c-apply/torequest/torequest.go 
b/cache-config/t3c-apply/torequest/torequest.go
index 8424446..b917dd3 100644
--- a/cache-config/t3c-apply/torequest/torequest.go
+++ b/cache-config/t3c-apply/torequest/torequest.go
@@ -488,7 +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.changedFiles = append(r.changedFiles, filepath.Join(cfg.Path, 
cfg.Name))
 
        r.RemapConfigReload = cfg.RemapPluginConfig ||
                cfg.Name == "remap.config" ||
diff --git a/cache-config/testing/ort-tests/t3c-reload_test.go 
b/cache-config/testing/ort-tests/t3c-reload_test.go
index ad2e868..c6c66e3 100644
--- a/cache-config/testing/ort-tests/t3c-reload_test.go
+++ b/cache-config/testing/ort-tests/t3c-reload_test.go
@@ -32,47 +32,131 @@ func TestT3cReload(t *testing.T) {
                tcdata.Divisions, tcdata.Regions, tcdata.PhysLocations,
                tcdata.CacheGroups, tcdata.Servers, tcdata.Topologies,
                tcdata.DeliveryServices}, func() {
-               t.Logf("------------- Start TestT3cReload Core ---------------")
-
-               cacheHostName := "atlanta-edge-03"
-
-               t.Logf("DEBUG TestT3cReload calling badass")
-               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 {
-                       t.Fatalf("failed to remove file '" + fileNameToRemove + 
"': " + err.Error())
-               }
-
-               t.Logf("DEBUG TestT3cReload setting upate flag")
-               // set the update flag, so syncds will run
-               if err := ExecTOUpdater("atlanta-edge-03", false, true); err != 
nil {
-                       t.Fatalf("t3c-update failed: %v\n", err)
-               }
-
-               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)
-               // }
-
-               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 ---------------")
+
+               doTestT3cReloadHeaderRewrite(t)
+               doTestT3cReloadAnythingInTrafficserverDir(t)
+               doTestT3cReloadNoChange(t)
+
        })
        t.Logf("------------- End of TestT3cReload ---------------")
 }
 
+func doTestT3cReloadHeaderRewrite(t *testing.T) {
+       t.Logf("------------- Start doTestT3cReloadHeaderRewrite 
---------------")
+
+       cacheHostName := "atlanta-edge-03"
+
+       t.Logf("DEBUG TestT3cReload calling badass")
+       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 {
+               t.Fatalf("failed to remove file '" + fileNameToRemove + "': " + 
err.Error())
+       }
+
+       t.Logf("DEBUG TestT3cReload setting upate flag")
+       // set the update flag, so syncds will run
+       if err := ExecTOUpdater("atlanta-edge-03", false, true); err != nil {
+               t.Fatalf("t3c-update failed: %v\n", err)
+       }
+
+       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)
+       // }
+
+       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 doTestT3cReloadHeaderRewrite 
---------------")
+}
+
+func doTestT3cReloadAnythingInTrafficserverDir(t *testing.T) {
+       t.Logf("------------- Start doTestT3cReloadAnythingInTrafficserverDir 
---------------")
+
+       cacheHostName := "atlanta-edge-03"
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite calling badass")
+       if stdOut, exitCode := t3cUpdateReload(cacheHostName, "badass"); 
exitCode != 0 {
+               t.Fatalf("ERROR: t3c badass failed: code '%v' output '%v'\n", 
exitCode, stdOut)
+       }
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite deleting file")
+
+       // delete a random file in etc/trafficserver which should trigger a 
reload
+       fileNameToRemove := filepath.Join(test_config_dir, 
"non-empty-file.config")
+       if err := os.Remove(fileNameToRemove); err != nil {
+               t.Fatalf("failed to remove file '" + fileNameToRemove + "': " + 
err.Error())
+       }
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite setting update flag")
+       // set the update flag, so syncds will run
+       if err := ExecTOUpdater("atlanta-edge-03", false, true); err != nil {
+               t.Fatalf("t3c-update failed: %v\n", err)
+       }
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite 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)
+       // }
+
+       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 
etc/trafficserver file, actual: '''%v'''\n", stdOut)
+       }
+
+       t.Logf("------------- End TestT3cReload 
doTestT3cReloadAnythingInTrafficserverDir ---------------")
+}
+
+func doTestT3cReloadNoChange(t *testing.T) {
+       t.Logf("------------- Start doTestT3cReloadNoChange ---------------")
+
+       cacheHostName := "atlanta-edge-03"
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite calling badass")
+       if stdOut, exitCode := t3cUpdateReload(cacheHostName, "badass"); 
exitCode != 0 {
+               t.Fatalf("ERROR: t3c badass failed: code '%v' output '%v'\n", 
exitCode, stdOut)
+       }
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite deleting file")
+
+       // no change, should not trigger a reload
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite setting update flag")
+       // set the update flag, so syncds will run
+       if err := ExecTOUpdater("atlanta-edge-03", false, true); err != nil {
+               t.Fatalf("t3c-update failed: %v\n", err)
+       }
+
+       t.Logf("DEBUG doTestT3cReloadHeaderRewrite 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)
+       // }
+
+       t.Logf("DEBUG TestT3cReload looking for reload string")
+       if strings.Contains(stdOut, `Running 'traffic_ctl config reload' now`) {
+               t.Errorf("expected t3c to not reload after no change, actual: 
'''%v'''\n", stdOut)
+       }
+
+       t.Logf("------------- End TestT3cReload doTestT3cReloadNoChange 
---------------")
+}
+
 func t3cUpdateReload(host string, runMode string) (string, int) {
        args := []string{
                "apply",
diff --git a/cache-config/testing/ort-tests/t3c_mode_test.go 
b/cache-config/testing/ort-tests/t3c_mode_test.go
index e574f97..55f71e0 100644
--- a/cache-config/testing/ort-tests/t3c_mode_test.go
+++ b/cache-config/testing/ort-tests/t3c_mode_test.go
@@ -53,9 +53,32 @@ func TestT3cBadassAndSyncDs(t *testing.T) {
                tcdata.CacheGroups, tcdata.Servers, tcdata.Topologies,
                tcdata.DeliveryServices}, func() {
 
-               // run badass and check config files.
-               err := runApply("atlanta-edge-03", "badass")
+               // traffic_ctl doesn't work because the test framework doesn't 
currently run ATS.
+               // So, temporarily replace it with a no-op
+               // 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())
+                       }
+               }()
+
+               // run badass and check config files.
+               if err := runApply("atlanta-edge-03", "badass"); err != nil {
                        t.Fatalf("ERROR: t3c badass failed: %v\n", err)
                }
 
diff --git a/cache-config/testing/ort-tests/tc-fixtures.json 
b/cache-config/testing/ort-tests/tc-fixtures.json
index 8abfc8c..e14374f 100644
--- a/cache-config/testing/ort-tests/tc-fixtures.json
+++ b/cache-config/testing/ort-tests/tc-fixtures.json
@@ -1770,6 +1770,18 @@
                     "value": "/opt/trafficserver/etc/trafficserver/"
                 },
                 {
+                    "configFile": "non-empty-file.config",
+                    "name": "location",
+                    "secure": false,
+                    "value": "/opt/trafficserver/etc/trafficserver/"
+                },
+                {
+                    "configFile": "non-empty-file.config",
+                    "name": "foo",
+                    "secure": false,
+                    "value": "bar"
+                },
+                {
                     "configFile": "remap.config",
                     "name": "location",
                      "secure": false,

Reply via email to