@@ -19,8 +19,8 @@ import (
1919
2020 "github.com/influxdata/telegraf"
2121 "github.com/influxdata/telegraf/config"
22- "github.com/influxdata/telegraf/internal"
2322 "github.com/influxdata/telegraf/internal/choice"
23+ "github.com/influxdata/telegraf/models"
2424 "github.com/influxdata/telegraf/testutil"
2525)
2626
@@ -1793,38 +1793,41 @@ func TestPodmanStatsCache(t *testing.T) {
17931793 require .Contains (t , d .statsCache , testID )
17941794}
17951795
1796- func TestStartWithUnavailableDocker (t * testing.T ) {
1797- // Test that Start returns a retryable StartupError when Docker is unavailable
1798- var acc testutil. Accumulator
1799- d := Docker {
1800- Log : testutil. Logger {} ,
1796+ func TestStartupErrorBehaviorError (t * testing.T ) {
1797+ // Test that model. Start returns error when Ping fails with default "error" behavior
1798+ // Uses the startup-error-behavior framework (TSD-006)
1799+ plugin := & Docker {
1800+ Timeout : config . Duration ( 100 * time . Millisecond ) ,
18011801 newClient : func (string , * tls.Config ) (dockerClient , error ) {
1802- return nil , errors .New ("cannot connect to the Docker daemon" )
1802+ return & mockClient {
1803+ PingF : func () (types.Ping , error ) {
1804+ return types.Ping {}, errors .New ("connection refused" )
1805+ },
1806+ CloseF : func () error {
1807+ return nil
1808+ },
1809+ }, nil
18031810 },
18041811 newEnvClient : func () (dockerClient , error ) {
1805- return nil , errors .New ("cannot connect to the Docker daemon " )
1812+ return nil , errors .New ("not using env client " )
18061813 },
18071814 }
1808-
1809- require .NoError (t , d .Init ())
1810-
1811- // Start should return a StartupError when Docker is unavailable
1812- err := d .Start (& acc )
1813- require .Error (t , err )
1814-
1815- var startupErr * internal.StartupError
1816- require .ErrorAs (t , err , & startupErr )
1817- require .Contains (t , startupErr .Error (), "failed to create Docker client" )
1818- }
1819-
1820- func TestStartWithPingFailure (t * testing.T ) {
1821- // Test that Start returns a retryable StartupError when Ping fails due to connection issues
1815+ model := models .NewRunningInput (plugin , & models.InputConfig {
1816+ Name : "docker" ,
1817+ Alias : "error-test" ,
1818+ })
1819+ model .StartupErrors .Set (0 )
1820+ require .NoError (t , model .Init ())
1821+
1822+ // Starting the plugin will fail with an error because Ping fails
18221823 var acc testutil.Accumulator
1824+ require .ErrorContains (t , model .Start (& acc ), "failed to ping Docker daemon" )
1825+ }
18231826
1824- // Create a mock client that succeeds on creation but fails on Ping
1825- d := Docker {
1826- Log : testutil. Logger {},
1827- Timeout : config .Duration (5 * time .Second ),
1827+ func TestStartupErrorBehaviorIgnore ( t * testing. T ) {
1828+ // Test that model.Start returns fatal error with "ignore" behavior when Ping fails
1829+ plugin := & Docker {
1830+ Timeout : config .Duration (100 * time .Millisecond ),
18281831 newClient : func (string , * tls.Config ) (dockerClient , error ) {
18291832 return & mockClient {
18301833 PingF : func () (types.Ping , error ) {
@@ -1839,26 +1842,24 @@ func TestStartWithPingFailure(t *testing.T) {
18391842 return nil , errors .New ("not using env client" )
18401843 },
18411844 }
1842-
1843- require .NoError (t , d .Init ())
1844-
1845- // Start should return a StartupError when Ping fails
1846- err := d .Start (& acc )
1845+ model := models .NewRunningInput (plugin , & models.InputConfig {
1846+ Name : "docker" ,
1847+ Alias : "ignore-test" ,
1848+ StartupErrorBehavior : "ignore" ,
1849+ })
1850+ model .StartupErrors .Set (0 )
1851+ require .NoError (t , model .Init ())
1852+
1853+ // Starting the plugin will fail and model should convert to fatal error
1854+ var acc testutil.Accumulator
1855+ err := model .Start (& acc )
18471856 require .Error (t , err )
1848-
1849- var startupErr * internal.StartupError
1850- require .ErrorAs (t , err , & startupErr )
1851- require .Contains (t , startupErr .Error (), "failed to ping Docker daemon" )
1852- // Client should be nil since we clean up on failure
1853- require .Nil (t , d .client )
1857+ require .Contains (t , err .Error (), "failed to ping Docker daemon" )
18541858}
18551859
18561860func TestStartSuccess (t * testing.T ) {
18571861 // Test that Start succeeds when Docker is available
1858- var acc testutil.Accumulator
1859-
1860- d := Docker {
1861- Log : testutil.Logger {},
1862+ plugin := & Docker {
18621863 Timeout : config .Duration (5 * time .Second ),
18631864 newClient : func (string , * tls.Config ) (dockerClient , error ) {
18641865 return & mockClient {
@@ -1883,8 +1884,13 @@ func TestStartSuccess(t *testing.T) {
18831884 return nil , errors .New ("not using env client" )
18841885 },
18851886 }
1887+ model := models .NewRunningInput (plugin , & models.InputConfig {
1888+ Name : "docker" ,
1889+ Alias : "success-test" ,
1890+ })
1891+ model .StartupErrors .Set (0 )
1892+ require .NoError (t , model .Init ())
18861893
1887- require .NoError (t , d .Init ())
1888- require .NoError (t , d .Start (& acc ))
1889- require .NotNil (t , d .client )
1894+ var acc testutil.Accumulator
1895+ require .NoError (t , model .Start (& acc ))
18901896}
0 commit comments