package Ġnet . cod inux . log . elasticsearch . converter Ċ Ċ import Ġnet . cod inux . log . elasticsearch . error handler . ErrorHandler Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Value Source Ċ import Ġorg . mockito . Mockito .* Ċ Ċ import Ġorg . mockito . kotlin . never Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Offset Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ internal Ġclass ĠElasticsearch Index Name Converter Test Ġ{ ĊĊĠ Ġprivate Ġval Ġunder Test Ġ= ĠElasticsearch Index Name Converter () ĊĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid Date Pattern At End () Ġ{ ĊĠĠĠ Ġassert Valid DateTime Pattern At End (" yyyy - MM - dd ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid DateTime Pattern At End () Ġ{ ĊĠĠĠ Ġassert Valid DateTime Pattern At End (" yyyy - MM - dd _ HH - mm - ss ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġassert Valid DateTime Pattern At End ( dateTime Pattern : ĠString ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġindex Name Pattern Ġ= Ġ" logs -% date {$ dateTime Pattern }" ĊĠĠĠ Ġval Ġexpected DateString Ġ= ĠDateTime Formatter . of Pattern ( dateTime Pattern ). format ( Instant . now (). at Offset ( Zone Offset . UTC )) ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġresolve Patterns ( index Name Pattern , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isEqualTo (" logs -" Ġ+ Ġexpected DateString ) ĊĊĠĠĠ Ġassert NoError Occurred ( error Handler Mock ) ĊĠ Ġ} ĊĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid Date Pattern At Start () Ġ{ ĊĠĠĠ Ġassert Valid DateTime Pattern At Start (" yyyy - MM - dd ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid DateTime Pattern At Start () Ġ{ ĊĠĠĠ Ġassert Valid DateTime Pattern At Start (" yyyy - MM - dd _ HH - mm - ss ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġassert Valid DateTime Pattern At Start ( dateTime Pattern : ĠString ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġindex Name Pattern Ġ= Ġ"% date {$ dateTime Pattern }- logs " ĊĠĠĠ Ġval Ġexpected DateString Ġ= ĠDateTime Formatter . of Pattern ( dateTime Pattern ). format ( Instant . now (). at Offset ( Zone Offset . UTC )) ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġresolve Patterns ( index Name Pattern , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isEqualTo ( expected DateString Ġ+ Ġ"- logs ") ĊĊĠĠĠ Ġassert NoError Occurred ( error Handler Mock ) ĊĠ Ġ} ĊĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid Date Pattern In String () Ġ{ ĊĠĠĠ Ġassert Valid DateTime Pattern In String (" yyyy - MM - dd ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid DateTime Pattern In String () Ġ{ ĊĠĠĠ Ġassert Valid DateTime Pattern In String (" yyyy - MM - dd _ HH - mm - ss ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġassert Valid DateTime Pattern In String ( dateTime Pattern : ĠString ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġindex Name Pattern Ġ= Ġ" logs -% date {$ dateTime Pattern }- index " ĊĠĠĠ Ġval Ġexpected DateString Ġ= ĠDateTime Formatter . of Pattern ( dateTime Pattern ). format ( Instant . now (). at Offset ( Zone Offset . UTC )) ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġresolve Patterns ( index Name Pattern , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isEqualTo (" logs -" Ġ+ Ġexpected DateString Ġ+ Ġ"- index ") ĊĊĠĠĠ Ġassert NoError Occurred ( error Handler Mock ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġmultiple DateTime Pattern In String () Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġindex Name Pattern Ġ= Ġ" logs -% date { yyyy - ww } -% date { dd _ HH - mm - ss }" ĊĠĠĠ Ġval Ġexpected Index Name Ġ= Ġindex Name Pattern . replace ("% date { yyyy - ww }", ĠDateTime Formatter . of Pattern (" yyyy - ww "). format ( Instant . now (). at Offset ( Zone Offset . UTC ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% date { dd _ HH - mm - ss }", ĠDateTime Formatter . of Pattern (" dd _ HH - mm - ss "). format ( Instant . now (). at Offset ( Zone Offset . UTC ))) ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġresolve Patterns ( index Name Pattern , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isEqualTo ( expected Index Name ) ĊĊĠĠĠ Ġassert NoError Occurred ( error Handler Mock ) ĊĠ Ġ} ĊĊĊĠ Ġ@ Test ĊĠ Ġfun Ġinvalid DateTime Pattern () Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġinvalid DateTime Pattern Ġ= Ġ" aaaa - bb - cc " ĊĠĠĠ Ġval Ġindex Name Pattern Ġ= Ġ" logs -% date {$ invalid DateTime Pattern }" ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġresolve Patterns ( index Name Pattern , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isEqualTo ( index Name Pattern ) Ġ// Ġnothing Ġhas Ġbeen Ġreplaced ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġtimes ( 1 )). log Error ( any String (), Ġany ( Exception :: class . java )) ĊĠ Ġ} ĊĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid DateTime Pattern DoesNot Get Re placed () Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġindex Name Pattern Ġ= Ġ" logs -% date { yyyy - dd _ HH - mm - ss }" ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġunder Test . build Index Name ( index Name Pattern , ĠerrorHandler Mock ) Ġ// Ġchecks Ġif Ġmask ing Ġdate Ġtime Ġpatterns Ġworks ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isEqualTo ( index Name Pattern ) Ġ// Ġnothing Ġmay Ġgets Ġreplaced Ġthen ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġnever ()). log Error ( any String (), Ġany ( Exception :: class . java )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġvalid DateTime Pattern DoesNot Get Re placed _ Two DateTime Pattern () Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġindex Name Pattern Ġ= Ġ" logs -% date { yyyy - ww } -% date { dd _ HH - mm - ss }" ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġunder Test . build Index Name ( index Name Pattern , ĠerrorHandler Mock ) Ġ// Ġchecks Ġif Ġmask ing Ġdate Ġtime Ġpatterns Ġworks ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isEqualTo ( index Name Pattern ) Ġ// Ġnothing Ġmay Ġgets Ġreplaced Ġthen ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġnever ()). log Error ( any String (), Ġany ( Exception :: class . java )) ĊĠ Ġ} ĊĊĊĠ Ġ@ Parameterized Test ĊĠ Ġ@ Value Source ( chars Ġ= Ġ[ Ġ'\\ ', Ġ'/', Ġ'*', Ġ' ?', Ġ'\" ', Ġ'<', Ġ'>', Ġ' |', Ġ' Ġ', Ġ', ', Ġ':' Ġ]) ĊĠ Ġfun Ġindex Name Contains Invalid Character ( invalid Index Name Character : ĠChar ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġinvalid Index Name Ġ= Ġ" logs -" Ġ+ Ġinvalid Index Name Character ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġunder Test . build Index Name ( invalid Index Name , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isNot EqualTo ( invalid Index Name ) ĊĠĠĠ ĠassertThat ( result ). does Not Contain ( invalid Index Name Character . toString ()) ĊĠĠĠ ĠassertThat ( result ). isEqualTo ( invalid Index Name . replace ( invalid Index Name Character . toString (), ĠElasticsearch Index Name Converter . Default Invalid Character Replacement )) ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġtimes ( 1 )). log Info ( any String ()) ĊĠ Ġ} ĊĊĠ Ġ@ Parameterized Test ĊĠ Ġ@ Value Source ( chars Ġ= Ġ[ Ġ'_ ', Ġ'-', Ġ'+' Ġ]) ĊĠ Ġfun Ġindex Name StartsWith Invalid Character ( invalid Index Name Start Character : ĠChar ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġinvalid Index Name Ġ= Ġinvalid Index Name Start Character Ġ+ Ġ"- logs " ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġunder Test . build Index Name ( invalid Index Name , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isNot EqualTo ( invalid Index Name ) ĊĠĠĠ ĠassertThat ( result ). does Not Contain ( invalid Index Name Start Character . toString ()) ĊĠĠĠ ĠassertThat ( result ). isEqualTo (" logs ") ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġtimes ( 2 )). log Info ( any String ()) ĊĠ Ġ} ĊĊĠ Ġ@ Parameterized Test ĊĠ Ġ@ Value Source ( strings Ġ= Ġ[ Ġ".", Ġ".. " Ġ]) ĊĠ Ġfun Ġindex Name Equals Invalid Name ( invalid Index Name : ĠString ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġunder Test . build Index Name ( invalid Index Name , ĠerrorHandler Mock ) Ġ// Ġdefault Ġreplacement Ġcharacter Ġ"_" Ġis Ġan Ġinvalid Ġindex Ġname Ġstart Ġcharacter ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isNot EqualTo ( invalid Index Name ) ĊĠĠĠ ĠassertThat ( result ). isEqualTo (" logs ") ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġtimes ( 1 )). log Error ( any String ()) ĊĠ Ġ} ĊĊĠ Ġ@ Parameterized Test ĊĠ Ġ@ Value Source ( strings Ġ= Ġ[ Ġ".", Ġ".. " Ġ]) ĊĠ Ġfun Ġindex Name Equals Invalid Name _ Replacement Character IsNot An Invalid Index Name Start Character ( invalid Index Name : ĠString ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġreplacement Character Ġ= Ġ" !" ĊĠĠĠ Ġval Ġunder Test Ġ= ĠElasticsearch Index Name Converter ( replacement Character ) ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġunder Test . build Index Name ( invalid Index Name , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isNot EqualTo ( invalid Index Name ) ĊĠĠĠ ĠassertThat ( result ). isEqualTo ( replacement Character ) ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġtimes ( 1 )). log Error ( any String ()) ĊĠ Ġ} ĊĊĠ Ġ@ Parameterized Test ĊĠ Ġ@ Value Source ( strings Ġ= Ġ[ Ġ" Logs ", Ġ" l O gs ", Ġ" log S " Ġ]) ĊĠ Ġfun Ġindex Name Contains UpperCase Characters ( invalid Index Name : ĠString ) Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval ĠerrorHandler Mock Ġ= Ġmock ( ErrorHandler :: class . java ) ĊĊĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġval Ġresult Ġ= Ġunder Test . build Index Name ( invalid Index Name , ĠerrorHandler Mock ) ĊĊĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertThat ( result ). isNot EqualTo ( invalid Index Name ) ĊĠĠĠ ĠassertThat ( result ). does Not Contain ( invalid Index Name ) ĊĠĠĠ ĠassertThat ( result ). isEqualTo (" logs ") ĊĊĠĠĠ Ġverify ( error Handler Mock , Ġtimes ( 1 )). log Info ( any String ()) ĊĠ Ġ} ĊĊĊĠ Ġprivate Ġfun Ġresolve Patterns ( index Name Pattern : ĠString , ĠerrorHandler Mock : ĠError Handler ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġunder Test . resolve Patterns ( index Name Pattern , Ġunder Test . get Included Patterns ( index Name Pattern ), ĠerrorHandler Mock ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġassert NoError Occurred ( error Handler Mock : ĠError Handler ) Ġ{ ĊĠĠĠ Ġverify ( error Handler Mock , Ġnever ()). log Error ( any String ()) ĊĠĠĠ Ġverify ( error Handler Mock , Ġnever ()). log Error ( any String (), Ġany ( Exception :: class . java )) ĊĠ Ġ} Ċ Ċ }