|
@@ -3353,6 +3353,10 @@ func TestEventRule(t *testing.T) {
|
|
|
}
|
|
|
a2 := dataprovider.BaseEventAction{
|
|
|
Name: "action2",
|
|
|
+ Type: dataprovider.ActionTypeBackup,
|
|
|
+ }
|
|
|
+ a3 := dataprovider.BaseEventAction{
|
|
|
+ Name: "action3",
|
|
|
Type: dataprovider.ActionTypeEmail,
|
|
|
Options: dataprovider.BaseEventActionOptions{
|
|
|
EmailConfig: dataprovider.EventActionEmailConfig{
|
|
@@ -3362,8 +3366,8 @@ func TestEventRule(t *testing.T) {
|
|
|
},
|
|
|
},
|
|
|
}
|
|
|
- a3 := dataprovider.BaseEventAction{
|
|
|
- Name: "action3",
|
|
|
+ a4 := dataprovider.BaseEventAction{
|
|
|
+ Name: "action4",
|
|
|
Type: dataprovider.ActionTypeEmail,
|
|
|
Options: dataprovider.BaseEventActionOptions{
|
|
|
EmailConfig: dataprovider.EventActionEmailConfig{
|
|
@@ -3379,6 +3383,9 @@ func TestEventRule(t *testing.T) {
|
|
|
assert.NoError(t, err)
|
|
|
action3, _, err := httpdtest.AddEventAction(a3, http.StatusCreated)
|
|
|
assert.NoError(t, err)
|
|
|
+ action4, _, err := httpdtest.AddEventAction(a4, http.StatusCreated)
|
|
|
+ assert.NoError(t, err)
|
|
|
+
|
|
|
r1 := dataprovider.EventRule{
|
|
|
Name: "test rule1",
|
|
|
Trigger: dataprovider.EventTriggerFsEvent,
|
|
@@ -3417,6 +3424,12 @@ func TestEventRule(t *testing.T) {
|
|
|
Name: action3.Name,
|
|
|
},
|
|
|
Order: 3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ BaseEventAction: dataprovider.BaseEventAction{
|
|
|
+ Name: action4.Name,
|
|
|
+ },
|
|
|
+ Order: 4,
|
|
|
Options: dataprovider.EventActionOptions{
|
|
|
IsFailureAction: true,
|
|
|
},
|
|
@@ -3442,13 +3455,13 @@ func TestEventRule(t *testing.T) {
|
|
|
Actions: []dataprovider.EventAction{
|
|
|
{
|
|
|
BaseEventAction: dataprovider.BaseEventAction{
|
|
|
- Name: action2.Name,
|
|
|
+ Name: action3.Name,
|
|
|
},
|
|
|
Order: 1,
|
|
|
},
|
|
|
{
|
|
|
BaseEventAction: dataprovider.BaseEventAction{
|
|
|
- Name: action3.Name,
|
|
|
+ Name: action4.Name,
|
|
|
},
|
|
|
Order: 2,
|
|
|
Options: dataprovider.EventActionOptions{
|
|
@@ -3469,7 +3482,7 @@ func TestEventRule(t *testing.T) {
|
|
|
Actions: []dataprovider.EventAction{
|
|
|
{
|
|
|
BaseEventAction: dataprovider.BaseEventAction{
|
|
|
- Name: action2.Name,
|
|
|
+ Name: action3.Name,
|
|
|
},
|
|
|
Order: 1,
|
|
|
},
|
|
@@ -3645,6 +3658,8 @@ func TestEventRule(t *testing.T) {
|
|
|
assert.NoError(t, err)
|
|
|
_, err = httpdtest.RemoveEventAction(action3, http.StatusOK)
|
|
|
assert.NoError(t, err)
|
|
|
+ _, err = httpdtest.RemoveEventAction(action4, http.StatusOK)
|
|
|
+ assert.NoError(t, err)
|
|
|
lastReceivedEmail.reset()
|
|
|
_, err = httpdtest.RemoveUser(user, http.StatusOK)
|
|
|
assert.NoError(t, err)
|
|
@@ -4237,6 +4252,89 @@ func TestEventFsActionsGroupFilters(t *testing.T) {
|
|
|
require.NoError(t, err)
|
|
|
}
|
|
|
|
|
|
+func TestBackupAsAttachment(t *testing.T) {
|
|
|
+ smtpCfg := smtp.Config{
|
|
|
+ Host: "127.0.0.1",
|
|
|
+ Port: 2525,
|
|
|
+ From: "notification@example.com",
|
|
|
+ TemplatesPath: "templates",
|
|
|
+ }
|
|
|
+ err := smtpCfg.Initialize(configDir)
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ a1 := dataprovider.BaseEventAction{
|
|
|
+ Name: "a1",
|
|
|
+ Type: dataprovider.ActionTypeBackup,
|
|
|
+ }
|
|
|
+ a2 := dataprovider.BaseEventAction{
|
|
|
+ Name: "a2",
|
|
|
+ Type: dataprovider.ActionTypeEmail,
|
|
|
+ Options: dataprovider.BaseEventActionOptions{
|
|
|
+ EmailConfig: dataprovider.EventActionEmailConfig{
|
|
|
+ Recipients: []string{"test@example.com"},
|
|
|
+ Subject: `"{{Event}} {{StatusString}}"`,
|
|
|
+ Body: "Domain: {{Name}}",
|
|
|
+ Attachments: []string{"/{{VirtualPath}}"},
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ action1, _, err := httpdtest.AddEventAction(a1, http.StatusCreated)
|
|
|
+ assert.NoError(t, err)
|
|
|
+ action2, _, err := httpdtest.AddEventAction(a2, http.StatusCreated)
|
|
|
+ assert.NoError(t, err)
|
|
|
+
|
|
|
+ r1 := dataprovider.EventRule{
|
|
|
+ Name: "test rule certificate",
|
|
|
+ Trigger: dataprovider.EventTriggerCertificate,
|
|
|
+ Actions: []dataprovider.EventAction{
|
|
|
+ {
|
|
|
+ BaseEventAction: dataprovider.BaseEventAction{
|
|
|
+ Name: action1.Name,
|
|
|
+ },
|
|
|
+ Order: 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ BaseEventAction: dataprovider.BaseEventAction{
|
|
|
+ Name: action2.Name,
|
|
|
+ },
|
|
|
+ Order: 2,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ rule1, _, err := httpdtest.AddEventRule(r1, http.StatusCreated)
|
|
|
+ assert.NoError(t, err)
|
|
|
+
|
|
|
+ lastReceivedEmail.reset()
|
|
|
+ renewalEvent := "Certificate renewal"
|
|
|
+
|
|
|
+ common.HandleCertificateEvent(common.EventParams{
|
|
|
+ Name: "example.com",
|
|
|
+ Timestamp: time.Now().UnixNano(),
|
|
|
+ Status: 1,
|
|
|
+ Event: renewalEvent,
|
|
|
+ })
|
|
|
+ assert.Eventually(t, func() bool {
|
|
|
+ return lastReceivedEmail.get().From != ""
|
|
|
+ }, 3000*time.Millisecond, 100*time.Millisecond)
|
|
|
+ email := lastReceivedEmail.get()
|
|
|
+ assert.Len(t, email.To, 1)
|
|
|
+ assert.True(t, util.Contains(email.To, "test@example.com"))
|
|
|
+ assert.Contains(t, email.Data, fmt.Sprintf(`Subject: "%s OK"`, renewalEvent))
|
|
|
+ assert.Contains(t, email.Data, `Domain: example.com`)
|
|
|
+ assert.Contains(t, email.Data, "Content-Type: application/json")
|
|
|
+
|
|
|
+ _, err = httpdtest.RemoveEventRule(rule1, http.StatusOK)
|
|
|
+ assert.NoError(t, err)
|
|
|
+ _, err = httpdtest.RemoveEventAction(action1, http.StatusOK)
|
|
|
+ assert.NoError(t, err)
|
|
|
+ _, err = httpdtest.RemoveEventAction(action2, http.StatusOK)
|
|
|
+ assert.NoError(t, err)
|
|
|
+
|
|
|
+ smtpCfg = smtp.Config{}
|
|
|
+ err = smtpCfg.Initialize(configDir)
|
|
|
+ require.NoError(t, err)
|
|
|
+}
|
|
|
+
|
|
|
func TestEventActionHTTPMultipart(t *testing.T) {
|
|
|
a1 := dataprovider.BaseEventAction{
|
|
|
Name: "action1",
|