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,