package Ġcom . github . kor ni lo va _ l . fl ame graph . plugin . server Ċ Ċ import Ġcom . github . kor ni lo va _ l . fl ame graph . plugin . Plugin FileManager Ċ import Ġcom . intellij . test Framework . fixtures . Light Platform Code Insight Fixture TestCase Ċ import Ġio . netty . handler . codec . http . HttpResponse Status Ċ import Ġorg . jetbrains . ide . BuiltIn Server Manager Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . Data OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . FileReader Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util .* ĊĊ Ċ class ĠFiles Uploader Test Ġ: ĠLight Platform Code Insight Fixture TestCase () Ġ{ ĊĊĠĠĠ Ġfun Ġtest Upload Small Files () Ġ{ ĊĠĠĠĠĠĠĠ ĠPlugin FileManager . delete All Uploaded Files () ĊĠĠĠĠĠĠĠ Ġsend File (" small . ser ", ĠByteArray ( 1 0 0 0 )) ĊĠĠĠĠĠĠĠ Ġfile Received Test (" small . ser ", Ġ 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Upload Medium Files () Ġ{ ĊĠĠĠĠĠĠĠ ĠPlugin FileManager . delete All Uploaded Files () ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġcreate Bytes ( bytes In MB Ġ* Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġsend File (" 0 1 _ medium . ser ", Ġbytes ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected File Ġ= ĠPlugin FileManager . temp File Saver . save ( bytes , Ġ" 0 1 _ medium . ser ") !! ĊĠĠĠĠĠĠĠ Ġfile Received Test (" 0 1 _ medium . ser ", Ġexpected File ) ĊĊĠĠĠĠĠĠĠ Ġsend File (" 0 2 _ medium . ser ", ĠByteArray ( bytes In MB Ġ* Ġ 9 0 )) ĊĠĠĠĠĠĠĠ Ġfile Received Test (" 0 2 _ medium . ser ", Ġbytes In MB Ġ* Ġ 9 0 ) ĊĊĠĠĠĠĠĠĠ Ġsend File (" 0 3 _ medium . ser ", ĠByteArray ( bytes In MB Ġ* Ġ 1 0 0 )) ĊĠĠĠĠĠĠĠ Ġfile Received Test (" 0 3 _ medium . ser ", Ġbytes In MB Ġ* Ġ 1 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Upload Big Files () Ġ{ ĊĠĠĠĠĠĠĠ ĠPlugin FileManager . delete All Uploaded Files () ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġcreate Bytes ( bytes In MB Ġ* Ġ 2 5 0 ) ĊĠĠĠĠĠĠĠ Ġsend File (" big . ser ", Ġbytes ) ĊĠĠĠĠĠĠĠ Ġvar Ġexpected File Ġ= ĠPlugin FileManager . temp File Saver . save ( bytes , Ġ" 0 1 _ medium . ser ") !! ĊĠĠĠĠĠĠĠ Ġfile Received Test (" big . ser ", Ġexpected File ) ĊĊĠĠĠĠĠĠĠ Ġ/* Ġsend Ġparts Ġin Ġreversed Ġorder Ġ*/ ĊĠĠĠĠĠĠĠ ĠPlugin FileManager . delete All Uploaded Files () ĊĠĠĠĠĠĠĠ Ġsend File (" big . ser ", Ġbytes , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexpected File Ġ= ĠPlugin FileManager . temp File Saver . save ( bytes , Ġ" 0 1 _ medium . ser ") !! ĊĠĠĠĠĠĠĠ Ġfile Received Test (" big . ser ", Ġexpected File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest J fr FileUpload () Ġ{ ĊĠĠĠĠĠĠĠ ĠPlugin FileManager . delete All Uploaded Files () ĊĠĠĠĠĠĠĠ Ġval Ġj mc Five Ġ= ĠFile (" src / test / resources / j fr _ files / j mc _ 5 _ recording . j fr ") ĊĠĠĠĠĠĠĠ Ġsend File ( j mc Five . name , Ġj mc Five . read Bytes ()) ĊĠĠĠĠĠĠĠ Ġfile Received Test ( j mc Five . name , ĠFile (" src / test / resources / j fr _ files / expected / j mc _ 5 _ recording . fl ame graph ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Fl ame graph FileUpload () Ġ{ ĊĠĠĠĠĠĠĠ ĠPlugin FileManager . delete All Uploaded Files () ĊĠĠĠĠĠĠĠ Ġval Ġfl ame graph File Ġ= ĠFile (" src / test / resources / Stack s OCT ree Builder Test / test _ data 0 1 . txt ") ĊĠĠĠĠĠĠĠ Ġsend File ( fl ame graph File . name , Ġfl ame graph File . read Bytes ()) ĊĠĠĠĠĠĠĠ Ġfile Received Test ( fl ame graph File . name , Ġfl ame graph File ) Ġ// Ġfile Ġshould Ġstay Ġthe Ġsame ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest If File Uploaded () Ġ{ ĊĠĠĠĠĠĠĠ ĠPlugin FileManager . delete All Uploaded Files () ĊĠĠĠĠĠĠĠ Ġvar Ġresponse Code Ġ= Ġsend Request Does File Exist (" file - does - not - exist . txt ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpResponse Status . NOT _ FOUND . code (), Ġresponse Code ) ĊĊĠĠĠĠĠĠĠ Ġsend File (" not - supported - file . txt ", ĠByteArray ( 1 0 0 )) ĊĠĠĠĠĠĠĠ Ġresponse Code Ġ= Ġsend Request Does File Exist (" not - supported - file . txt ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpResponse Status . NOT _ FOUND . code (), Ġresponse Code ) ĊĊĠĠĠĠĠĠĠ Ġsend File (" supported - file . ser ", ĠByteArray ( 1 0 0 )) ĊĠĠĠĠĠĠĠ Ġresponse Code Ġ= Ġsend Request Does File Exist (" supported - file . ser ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpResponse Status . FOUND . code (), Ġresponse Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Request Does File Exist ( fileName : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL (" http :// localhost :${ BuiltIn Server Manager . getInstance (). port }/ fl ame graph - profiler / does - file - exist ") ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠ Ġconnection . request Method Ġ= Ġ" GET " ĊĊĠĠĠĠĠĠĠ Ġconnection . setRequest Property (" File - Name ", ĠfileName ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġconnection . response Code ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġbyte Ġarray Ġthat Ġcontains Ġlines ĊĠĠĠĠ Ġ* Ġeach Ġline Ġcontains Ġa Ġnumber Ġ== Ġnumber Ġof Ġcurrent Ġline ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Bytes ( size : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( size ) ĊĠĠĠĠĠĠĠ Ġvar ĠlineNumber Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Size Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Size Ġ< Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Bytes Ġ= Ġ"$ line Number . ĠSome Ġtext Ġthat Ġis Ġneeded Ġto Ġincrease Ġsize Ġof Ġlines \ n ". toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= ĠMath . min ( bytes . size , Ġcurrent Size Ġ+ Ġnew Bytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( new Bytes , Ġ 0 , Ġbytes , Ġcurrent Size , Ġnew Size Ġ- Ġcurrent Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Size Ġ= Ġnew Size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfile Received Test ( fileName : ĠString , ĠfileSize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠPlugin FileManager . get LogFile (" uploaded - files ", ĠfileName ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( file ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( file Size , Ġfile !!. read Bytes (). size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfile Received Test ( fileName : ĠString , Ġexpected File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠPlugin FileManager . get LogFile (" uploaded - files ", ĠfileName ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( file ) ĊĠĠĠĠĠĠĠ ĠBufferedReader ( FileReader ( file )). use Ġ{ Ġreader 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( FileReader ( expected File )). use Ġ{ Ġreader 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline 1 Ġ= Ġreader 1 . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline 2 Ġ= Ġreader 2 . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( line 1 Ġ!= Ġnull Ġ&& Ġline 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line 2 , Ġline 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline 1 Ġ= Ġreader 1 . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline 2 Ġ= Ġreader 2 . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġassert Ġthe Ġsame Ġnumber Ġof Ġlines Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( line 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( line 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( file !!. read Lines (), Ġexpected File . read Lines ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġbytes In MB Ġ= Ġ 1 _ 0 0 0 _ 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġmeg aby tes In One Part Ġ= Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġsend File ( fileName : ĠString , Ġbytes : ĠByteArray , Ġreverse Order : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparts Count Ġ= Ġbytes . size Ġ/ Ġ( bytes In MB Ġ* Ġmeg aby tes In One Part ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bytes . size Ġ% Ġ( bytes In MB Ġ* Ġmeg aby tes In One Part ) Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparts Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġdo Ġnot Ġpause Ġin Ġfollowing Ġblock Ġwhile Ġdebugging . ĠIt Ġmay Ġbreak Ġconnection Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġif Ġ( reverse Order ) Ġparts Count Ġ- Ġ 1 Ġdown To Ġ 0 Ġelse Ġ 0 Ġuntil Ġparts Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" request ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġconnection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL (" http :// localhost :${ BuiltIn Server Manager . getInstance (). port }/ fl ame graph - profiler / upload - file ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . request Method Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . setRequest Property (" Content - Type ", Ġ" application / x - www - form - urlencoded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . use Caches Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . do Output Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Length Ġ= Ġif Ġ( i Ġ== Ġparts Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes . size Ġ% Ġ( bytes In MB Ġ* Ġmeg aby tes In One Part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes In MB Ġ* Ġmeg aby tes In One Part ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . setRequest Property (" Content - Length ", ĠInteger . toString ( content Length )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . setRequest Property (" File - Part ", Ġ"${ i Ġ+ Ġ 1 }/ $ parts Count ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . setRequest Property (" File - Name ", ĠfileName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Send Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwr Ġ= ĠData OutputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwr . write ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . copyOf Range ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ* Ġbytes In MB Ġ* Ġmeg aby tes In One Part , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . min ( bytes . size , Ġ( i Ġ+ Ġ 1 ) Ġ* Ġbytes In MB Ġ* Ġmeg aby tes In One Part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwr . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwr . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Response ( connection ) Ġ// Ġwithout Ġit Ġconnection Ġwill Ġnot Ġbe Ġclosed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Response ( connection : ĠHttp URLConnection ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconnection . inputStream . read Bytes () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }