in e2etest/declarativeScenario.go [75:187]
func (s *scenario) Run() {
defer func() { // catch a test panicking
if err := recover(); err != nil {
s.a.Error(fmt.Sprintf("Test panicked: %v\n%s", err, debug.Stack()))
}
}()
defer s.cleanup()
// setup runner
azcopyDir, err := os.MkdirTemp("", "")
if err != nil {
s.a.Error(err.Error())
return
}
azcopyRan := false
defer func() {
if os.Getenv("AZCOPY_E2E_LOG_OUTPUT") == "" {
s.a.Assert(os.RemoveAll(azcopyDir), equals(), nil)
return // no need, just delete logdir
}
err := os.MkdirAll(os.Getenv("AZCOPY_E2E_LOG_OUTPUT"), os.ModePerm|os.ModeDir)
if err != nil {
s.a.Assert(err, equals(), nil)
return
}
if azcopyRan && s.a.Failed() {
s.uploadLogs(azcopyDir)
s.a.(*testingAsserter).t.Log("uploaded logs for job " + s.state.result.jobID.String() + " as an artifact")
}
}()
// setup scenario
// First, validate the accounts make sense for the source/dests
if s.srcAccountType.IsBlobOnly() {
s.a.Assert(true, equals(), s.fromTo.From() == common.ELocation.Blob() || s.fromTo.From() == common.ELocation.BlobFS())
}
if s.destAccountType.IsManagedDisk() {
s.a.Assert(s.destAccountType, notEquals(), EAccountType.StdManagedDisk(), "Upload is not supported in MD testing yet")
s.a.Assert(s.destAccountType, notEquals(), EAccountType.OAuthManagedDisk(), "Upload is not supported in MD testing yet")
s.a.Assert(s.destAccountType, notEquals(), EAccountType.LargeManagedDisk(), "Upload is not supported in MD testing yet")
s.a.Assert(s.destAccountType, notEquals(), EAccountType.ManagedDiskSnapshot(), "Cannot upload to a MD snapshot")
s.a.Assert(s.destAccountType, notEquals(), EAccountType.ManagedDiskSnapshotOAuth(), "Cannot upload to a MD snapshot")
s.a.Assert(s.destAccountType, notEquals(), EAccountType.LargeManagedDiskSnapshot(), "Cannot upload to a MD snapshot")
s.a.Assert(true, equals(), s.fromTo.From() == common.ELocation.Blob() || s.fromTo.From() == common.ELocation.BlobFS())
}
// setup
s.assignSourceAndDest() // what/where are they
s.state.source.createLocation(s.a, s)
s.state.dest.createLocation(s.a, s)
s.state.source.createFiles(s.a, s, true)
s.state.dest.createFiles(s.a, s, false)
if s.a.Failed() {
return // setup failed. No point in running the test
}
// call pre-run hook
if !s.runHook(s.hs.beforeRunJob) {
return
}
// execute
azcopyRan = true
s.runAzCopy(azcopyDir)
if s.a.Failed() {
return // execution failed. No point in running validation
}
// resume if needed
if s.needResume {
tx, err := s.state.result.GetTransferList(common.ETransferStatus.Cancelled(), azcopyDir)
s.a.AssertNoErr(err, "Failed to get transfer list for Cancelled")
s.a.Assert(len(tx), equals(), len(s.p.debugSkipFiles), "Job cancel didn't completely work")
if !s.runHook(s.hs.beforeResumeHook) {
return
}
s.resumeAzCopy(azcopyDir)
}
if s.a.Failed() {
return // resume failed. No point in running validation
}
// cancel if needed
if s.needCancel {
s.cancelAzCopy(azcopyDir)
}
if s.a.Failed() {
return // resume failed. No point in running validation
}
// check
s.validateTransferStates(azcopyDir)
if s.a.Failed() {
return // no point in doing more validation
}
if !s.p.destNull {
s.validateProperties()
if s.a.Failed() {
return // no point in doing more validation
}
if s.validate&eValidate.AutoPlusContent() != 0 {
s.validateContent()
}
}
s.runHook(s.hs.afterValidation)
}