Regression
unix-32 / Tests-unix-32 / Unix32.Gofer.Tests.Tests.GoferApiTest.testRepositoryErrors (from Gofer-Tests)
Stacktrace
Process>>pvtSignal:list: [ self schedule. "It is critical that the following has no suspension point so that the test and the wait primitive are atomic. In addition, if the delay is no longer being waited on while entering the way we know that it is expired because the delay has already fired." beingWaitedOn ifTrue: [ delaySemaphore wait ] ifFalse: [ expired := true ] ] in DelayWaitTimeout>>wait BlockClosure>>ensure: DelayWaitTimeout>>wait Semaphore>>waitTimeoutMSecs: Socket>>waitForDataFor:ifClosed:ifTimedOut: Socket>>waitForDataFor: ZdcSocketStream(ZdcAbstractSocketStream)>>socketWaitForData [ self socketWaitForData ] in ZdcSocketStream(ZdcSimpleSocketStream)>>fillReadBuffer BlockClosure>>on:do: ZdcSocketStream(ZdcSimpleSocketStream)>>fillReadBuffer ZdcSocketStream(ZdcAbstractSocketStream)>>next ZnLineReader>>processNext ZnLineReader>>nextLine ZnStatusLine>>readFrom: ZnStatusLine class>>readFrom: ZnResponse>>readHeaderFrom: ZnResponse(ZnMessage)>>readFrom: ZnResponse class(ZnMessage class)>>readFrom: [ :stream | ZnResponse readFrom: stream ] in [ [ :stream | ZnResponse readFrom: stream ] ] in ZnClient>>reader [ self reader value: connection ] in [ response := (#(HEAD CONNECT) includes: request method) ifTrue: [ ZnResponse readHeaderFrom: connection ] ifFalse: [ self streaming ifTrue: [ ZnResponse readStreamingFrom: connection ] ifFalse: [ self withMaximumEntitySizeDo: [ self reader value: connection ] ] ] ] in [ self withDefaultCharacterEncoderDo: [ response := (#(HEAD CONNECT) includes: request method) ifTrue: [ ZnResponse readHeaderFrom: connection ] ifFalse: [ self streaming ifTrue: [ ZnResponse readStreamingFrom: connection ] ifFalse: [ self withMaximumEntitySizeDo: [ self reader value: connection ] ] ] ] ] in ZnClient>>readResponse True>>ifTrue:ifFalse: ZnClient>>withMaximumEntitySizeDo: [ response := (#(HEAD CONNECT) includes: request method) ifTrue: [ ZnResponse readHeaderFrom: connection ] ifFalse: [ self streaming ifTrue: [ ZnResponse readStreamingFrom: connection ] ifFalse: [ self withMaximumEntitySizeDo: [ self reader value: connection ] ] ] ] in [ self withDefaultCharacterEncoderDo: [ response := (#(HEAD CONNECT) includes: request method) ifTrue: [ ZnResponse readHeaderFrom: connection ] ifFalse: [ self streaming ifTrue: [ ZnResponse readStreamingFrom: connection ] ifFalse: [ self withMaximumEntitySizeDo: [ self reader value: connection ] ] ] ] ] in ZnClient>>readResponse True>>ifTrue:ifFalse: ZnClient>>withDefaultCharacterEncoderDo: [ self withDefaultCharacterEncoderDo: [ response := (#(HEAD CONNECT) includes: request method) ifTrue: [ ZnResponse readHeaderFrom: connection ] ifFalse: [ self streaming ifTrue: [ ZnResponse readStreamingFrom: connection ] ifFalse: [ self withMaximumEntitySizeDo: [ self reader value: connection ] ] ] ] ] in ZnClient>>readResponse True>>ifTrue:ifFalse: ZnClient>>withMaximumNumberOfDictionaryEntriesDo: ZnClient>>readResponse ZnClient>>executeRequestResponse [ self executeRequestResponse ] in ZnClient>>getConnectionAndExecute BlockClosure>>ensure: ZnClient>>getConnectionAndExecute ZnClient>>executeWithRedirectsRemaining: [ self executeWithRedirectsRemaining: self maxNumberOfRedirects ] in ZnClient>>executeWithRetriesRemaining: BlockClosure>>on:do: ZnClient>>executeWithRetriesRemaining: [ self executeWithRetriesRemaining: self numberOfRetries ] in [ [ self executeWithRetriesRemaining: self numberOfRetries ] on: Error do: self ifFailBlock ] in ZnClient>>executeWithTimeout BlockClosure>>on:do: [ [ self executeWithRetriesRemaining: self numberOfRetries ] on: Error do: self ifFailBlock ] in ZnClient>>executeWithTimeout [ ^ block value ] in ZnClient>>withTimeoutDo: [ activeProcess psValueAt: index put: anObject. aBlock value ] in ZnConnectionTimeout(DynamicVariable)>>value:during: BlockClosure>>ensure: ZnConnectionTimeout(DynamicVariable)>>value:during: ZnConnectionTimeout class(DynamicVariable class)>>value:during: ZnClient>>withTimeoutDo: ZnClient>>executeWithTimeout [ result := self executeWithTimeout ] in ZnClient>>execute [ ^ block value ] in ZnClient>>withProgressDo: [ activeProcess psValueAt: index put: anObject. aBlock value ] in ZnSignalProgress(DynamicVariable)>>value:during: BlockClosure>>ensure: ZnSignalProgress(DynamicVariable)>>value:during: ZnSignalProgress class(DynamicVariable class)>>value:during: ZnClient>>withProgressDo: ZnClient>>execute ZnClient>>get [ client := self httpClient. client ifFail: [ :exception | (exception className beginsWith: 'Zn') ifTrue: [ MCRepositoryError signal: 'Could not access ' , self location , ': ' , exception printString ] ifFalse: [ exception pass ] ]; url: self locationWithTrailingSlash; queryAt: 'C' put: 'M;O=D'; "legacy that some servers maybe expect" get. self assertNonBinaryResponse: client response ] in MCHttpRepository>>loadAllFileNames [ workBlock value ] in [ :bar | [ workBlock value ] on: HTTPProgress do: [ :ex | (ex total == nil or: [ ex amount == nil ]) ifFalse: [ (nextUpdateTime < Time millisecondClockValue or: [ ex total = ex amount ]) ifTrue: [ bar current: ex amount asFloat / ex total asFloat. nextUpdateTime := Time millisecondClockValue + 100 ] ]. ex resume ] ] in MCHttpRepository>>displayProgress:during: BlockClosure>>on:do: [ :bar | [ workBlock value ] on: HTTPProgress do: [ :ex | (ex total == nil or: [ ex amount == nil ]) ifFalse: [ (nextUpdateTime < Time millisecondClockValue or: [ ex total = ex amount ]) ifTrue: [ bar current: ex amount asFloat / ex total asFloat. nextUpdateTime := Time millisecondClockValue + 100 ] ]. ex resume ] ] in MCHttpRepository>>displayProgress:during: BlockClosure>>cull: [ ^ block cull: self ] in [ self prepareForRunning. CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run [ activeProcess psValueAt: index put: anObject. aBlock value ] in CurrentJob(DynamicVariable)>>value:during: BlockClosure>>ensure: CurrentJob(DynamicVariable)>>value:during: CurrentJob class(DynamicVariable class)>>value:during: [ self prepareForRunning. CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run BlockClosure>>ensure: Job>>run NonInteractiveUIManager(UIManager)>>displayProgress:from:to:during: MCHttpRepository>>displayProgress:during: MCHttpRepository>>loadAllFileNames MCHttpRepository(MCFileBasedRepository)>>allFileNames MCHttpRepository(MCFileBasedRepository)>>readableFileNames MCHttpRepository(MCFileBasedRepository)>>allVersionNames [ self allVersionNames ] in MCHttpRepository(MCFileBasedRepository)>>goferReferences BlockClosure>>on:do: MCHttpRepository(MCFileBasedRepository)>>goferReferences [ aRepository goferReferences asSortedCollection asArray ] in Gofer>>basicReferencesIn: BlockClosure>>on:do: Gofer>>basicReferencesIn: [ self basicReferencesIn: aRepository ] in Gofer>>allResolvedIn: [ self at: key put: aBlock value ] in Dictionary>>at:ifAbsentPut: Dictionary>>at:ifAbsent: Dictionary>>at:ifAbsentPut: Gofer>>allResolvedIn: [ :repository | resolved addAll: (self allResolvedIn: repository) ] in Gofer>>allResolved Array(SequenceableCollection)>>do: Gofer>>allResolved GoferPackageReference(GoferReference)>>resolveAllWith: GoferPackageReference(GoferReference)>>resolveWith: [ :each | each resolveWith: self ] in Gofer>>resolved Array(SequenceableCollection)>>collect: Gofer>>resolved [ gofer resolved ] in GoferApiTest>>testRepositoryErrors [ aBlock value. false ] in GoferApiTest(TestAsserter)>>executeShould:inScopeOf: BlockClosure>>on:do: GoferApiTest(TestAsserter)>>executeShould:inScopeOf: GoferApiTest(TestAsserter)>>should:raise: GoferApiTest>>testRepositoryErrors GoferApiTest(TestCase)>>performTest