You've already forked watchtower
							
							
				mirror of
				https://github.com/containrrr/watchtower.git
				synced 2025-10-31 00:17:44 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package notifications
 | |
| 
 | |
| import (
 | |
| 	"github.com/containrrr/shoutrrr/pkg/types"
 | |
| 	"testing"
 | |
| 	"text/template"
 | |
| 
 | |
| 	"github.com/containrrr/watchtower/internal/flags"
 | |
| 	log "github.com/sirupsen/logrus"
 | |
| 	"github.com/spf13/cobra"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestShoutrrrDefaultTemplate(t *testing.T) {
 | |
| 	cmd := new(cobra.Command)
 | |
| 
 | |
| 	shoutrrr := &shoutrrrTypeNotifier{
 | |
| 		template: getShoutrrrTemplate(cmd),
 | |
| 	}
 | |
| 
 | |
| 	entries := []*log.Entry{
 | |
| 		{
 | |
| 			Message: "foo bar",
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	s := shoutrrr.buildMessage(entries)
 | |
| 
 | |
| 	require.Equal(t, "foo bar\n", s)
 | |
| }
 | |
| 
 | |
| func TestShoutrrrTemplate(t *testing.T) {
 | |
| 	cmd := new(cobra.Command)
 | |
| 	flags.RegisterNotificationFlags(cmd)
 | |
| 	err := cmd.ParseFlags([]string{"--notification-template={{range .}}{{.Level}}: {{.Message}}{{println}}{{end}}"})
 | |
| 
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	shoutrrr := &shoutrrrTypeNotifier{
 | |
| 		template: getShoutrrrTemplate(cmd),
 | |
| 	}
 | |
| 
 | |
| 	entries := []*log.Entry{
 | |
| 		{
 | |
| 			Level:   log.InfoLevel,
 | |
| 			Message: "foo bar",
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	s := shoutrrr.buildMessage(entries)
 | |
| 
 | |
| 	require.Equal(t, "info: foo bar\n", s)
 | |
| }
 | |
| 
 | |
| func TestShoutrrrStringFunctions(t *testing.T) {
 | |
| 	cmd := new(cobra.Command)
 | |
| 	flags.RegisterNotificationFlags(cmd)
 | |
| 	err := cmd.ParseFlags([]string{"--notification-template={{range .}}{{.Level | printf \"%v\" | ToUpper }}: {{.Message | ToLower }} {{.Message | Title }}{{println}}{{end}}"})
 | |
| 
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	shoutrrr := &shoutrrrTypeNotifier{
 | |
| 		template: getShoutrrrTemplate(cmd),
 | |
| 	}
 | |
| 
 | |
| 	entries := []*log.Entry{
 | |
| 		{
 | |
| 			Level:   log.InfoLevel,
 | |
| 			Message: "foo Bar",
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	s := shoutrrr.buildMessage(entries)
 | |
| 
 | |
| 	require.Equal(t, "INFO: foo bar Foo Bar\n", s)
 | |
| }
 | |
| 
 | |
| func TestShoutrrrInvalidTemplateUsesTemplate(t *testing.T) {
 | |
| 	cmd := new(cobra.Command)
 | |
| 
 | |
| 	flags.RegisterNotificationFlags(cmd)
 | |
| 	err := cmd.ParseFlags([]string{"--notification-template={{"})
 | |
| 
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	shoutrrr := &shoutrrrTypeNotifier{
 | |
| 		template: getShoutrrrTemplate(cmd),
 | |
| 	}
 | |
| 
 | |
| 	shoutrrrDefault := &shoutrrrTypeNotifier{
 | |
| 		template: template.Must(template.New("").Parse(shoutrrrDefaultTemplate)),
 | |
| 	}
 | |
| 
 | |
| 	entries := []*log.Entry{
 | |
| 		{
 | |
| 			Message: "foo bar",
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	s := shoutrrr.buildMessage(entries)
 | |
| 	sd := shoutrrrDefault.buildMessage(entries)
 | |
| 
 | |
| 	require.Equal(t, sd, s)
 | |
| }
 | |
| 
 | |
| type blockingRouter struct {
 | |
| 	unlock chan bool
 | |
| 	sent   chan bool
 | |
| }
 | |
| 
 | |
| func (b blockingRouter) Send(message string, params *types.Params) []error {
 | |
| 	_ = <-b.unlock
 | |
| 	b.sent <- true
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func TestSlowNotificationNotSent(t *testing.T) {
 | |
| 	_, blockingRouter := sendNotificationsWithBlockingRouter()
 | |
| 
 | |
| 	notifSent := false
 | |
| 	select {
 | |
| 	case notifSent = <-blockingRouter.sent:
 | |
| 	default:
 | |
| 	}
 | |
| 
 | |
| 	require.Equal(t, false, notifSent)
 | |
| }
 | |
| 
 | |
| func TestSlowNotificationSent(t *testing.T) {
 | |
| 	shoutrrr, blockingRouter := sendNotificationsWithBlockingRouter()
 | |
| 
 | |
| 	blockingRouter.unlock <- true
 | |
| 	shoutrrr.Close()
 | |
| 
 | |
| 	notifSent := false
 | |
| 	select {
 | |
| 	case notifSent = <-blockingRouter.sent:
 | |
| 	default:
 | |
| 	}
 | |
| 	require.Equal(t, true, notifSent)
 | |
| }
 | |
| 
 | |
| func sendNotificationsWithBlockingRouter() (*shoutrrrTypeNotifier, *blockingRouter) {
 | |
| 	cmd := new(cobra.Command)
 | |
| 
 | |
| 	router := &blockingRouter{
 | |
| 		unlock: make(chan bool, 1),
 | |
| 		sent:   make(chan bool, 1),
 | |
| 	}
 | |
| 
 | |
| 	shoutrrr := &shoutrrrTypeNotifier{
 | |
| 		template: getShoutrrrTemplate(cmd),
 | |
| 		messages: make(chan string, 1),
 | |
| 		done:     make(chan bool),
 | |
| 		Router:   router,
 | |
| 	}
 | |
| 
 | |
| 	entry := &log.Entry{
 | |
| 		Message: "foo bar",
 | |
| 	}
 | |
| 
 | |
| 	go sendNotifications(shoutrrr)
 | |
| 
 | |
| 	shoutrrr.StartNotification()
 | |
| 	shoutrrr.Fire(entry)
 | |
| 
 | |
| 	shoutrrr.SendNotification()
 | |
| 
 | |
| 	return shoutrrr, router
 | |
| }
 |