AWSScriptBehaviorS3Test.cpp 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/RTTI/BehaviorContext.h>
  9. #include <AzFramework/StringFunc/StringFunc.h>
  10. #include <AzTest/AzTest.h>
  11. #include <ScriptCanvas/AWSScriptBehaviorS3.h>
  12. #include <TestFramework/AWSCoreFixture.h>
  13. using namespace AWSCore;
  14. class AWSScriptBehaviorS3NotificationBusHandlerMock
  15. : public AWSScriptBehaviorS3NotificationBusHandler
  16. {
  17. public:
  18. AZ_CLASS_ALLOCATOR(AWSScriptBehaviorS3NotificationBusHandlerMock, AZ::SystemAllocator)
  19. AWSScriptBehaviorS3NotificationBusHandlerMock()
  20. {
  21. AWSScriptBehaviorS3NotificationBus::Handler::BusConnect();
  22. }
  23. ~AWSScriptBehaviorS3NotificationBusHandlerMock() override
  24. {
  25. AWSScriptBehaviorS3NotificationBus::Handler::BusDisconnect();
  26. }
  27. MOCK_METHOD1(OnHeadObjectSuccess, void(const AZStd::string&));
  28. MOCK_METHOD1(OnHeadObjectError, void(const AZStd::string&));
  29. MOCK_METHOD1(OnGetObjectSuccess, void(const AZStd::string&));
  30. MOCK_METHOD1(OnGetObjectError, void(const AZStd::string&));
  31. };
  32. class AWSScriptBehaviorS3Test
  33. : public AWSCoreFixture
  34. {
  35. public:
  36. void CreateReadOnlyTestFile(const AZStd::string& filePath)
  37. {
  38. AZ::IO::SystemFile file;
  39. if (!file.Open(
  40. filePath.c_str(),
  41. AZ::IO::SystemFile::OpenMode::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY))
  42. {
  43. AZ_Assert(false, "Failed to open test file at %s", filePath.c_str());
  44. }
  45. AZStd::string testContent = "It is a test file";
  46. if (file.Write(testContent.c_str(), testContent.size()) != testContent.size())
  47. {
  48. AZ_Assert(false, "Failed to write test file with content %s", testContent.c_str());
  49. }
  50. file.Close();
  51. AZ_Assert(AZ::IO::SystemFile::SetWritable(filePath.c_str(), false), "Failed to mark test file as read-only");
  52. }
  53. void RemoveReadOnlyTestFile(const AZStd::string& filePath)
  54. {
  55. if (!filePath.empty())
  56. {
  57. AZ_Assert(AZ::IO::SystemFile::SetWritable(filePath.c_str(), true), "Failed to mark test file as writeable");
  58. AZ_Assert(AZ::IO::SystemFile::Delete(filePath.c_str()), "Failed to delete test config file at %s", filePath.c_str());
  59. }
  60. }
  61. };
  62. TEST_F(AWSScriptBehaviorS3Test, HeadObjectRaw_CallWithEmptyBucketName_InvokeOnError)
  63. {
  64. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  65. EXPECT_CALL(s3HandlerMock, OnHeadObjectError(::testing::_)).Times(1);
  66. AWSScriptBehaviorS3::HeadObjectRaw("", "dummyObject", "dummyRegion");
  67. }
  68. TEST_F(AWSScriptBehaviorS3Test, HeadObjectRaw_CallWithEmptyObjectKeyName_InvokeOnError)
  69. {
  70. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  71. EXPECT_CALL(s3HandlerMock, OnHeadObjectError(::testing::_)).Times(1);
  72. AWSScriptBehaviorS3::HeadObjectRaw("dummyBucket", "", "dummyRegion");
  73. }
  74. TEST_F(AWSScriptBehaviorS3Test, HeadObjectRaw_CallWithEmptyRegionName_InvokeOnError)
  75. {
  76. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  77. EXPECT_CALL(s3HandlerMock, OnHeadObjectError(::testing::_)).Times(1);
  78. AWSScriptBehaviorS3::HeadObjectRaw("dummyBucket", "dummyObject", "");
  79. }
  80. TEST_F(AWSScriptBehaviorS3Test, HeadObject_NoBucketNameInResourceMappingFound_InvokeOnError)
  81. {
  82. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  83. EXPECT_CALL(s3HandlerMock, OnHeadObjectError(::testing::_)).Times(1);
  84. AWSScriptBehaviorS3::HeadObject("dummyBucket", "dummyObject");
  85. }
  86. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithEmptyBucketName_InvokeOnError)
  87. {
  88. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  89. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  90. AWSScriptBehaviorS3::GetObjectRaw("", "dummyObject", "dummyRegion", "dummyOut");
  91. }
  92. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithEmptyObjectKeyName_InvokeOnError)
  93. {
  94. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  95. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  96. AWSScriptBehaviorS3::GetObjectRaw("dummyBucket", "", "dummyRegion", "dummyOut");
  97. }
  98. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithEmptyRegionName_InvokeOnError)
  99. {
  100. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  101. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  102. AWSScriptBehaviorS3::GetObjectRaw("dummyBucket", "dummyObject", "", "dummyOut");
  103. }
  104. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithEmptyOutfileName_InvokeOnError)
  105. {
  106. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  107. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  108. AWSScriptBehaviorS3::GetObjectRaw("dummyBucket", "dummyObject", "dummyRegion", "");
  109. }
  110. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithOutfileFailedToResolve_InvokeOnError)
  111. {
  112. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  113. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  114. AWSScriptBehaviorS3::GetObjectRaw("dummyBucket", "dummyObject", "dummyRegion", "@dummy@/dummyOut.txt");
  115. }
  116. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithOutfileNameIsDirectory_InvokeOnError)
  117. {
  118. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  119. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  120. AWSScriptBehaviorS3::GetObjectRaw("dummyBucket", "dummyObject", "dummyRegion", AZ::Test::GetCurrentExecutablePath());
  121. }
  122. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithOutfileDirectoryNoExist_InvokeOnError)
  123. {
  124. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  125. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  126. AZStd::string dummyDirectory = AZStd::string::format("%s/dummyDirectory/dummyOut.txt", AZ::Test::GetCurrentExecutablePath().c_str());
  127. AWSScriptBehaviorS3::GetObjectRaw("dummyBucket", "dummyObject", "dummyRegion", dummyDirectory);
  128. }
  129. #if defined(AZ_DEBUG_BUILD) || defined(AZ_PROFILE_BUILD)
  130. // The preparation step for this test case does not work in release mode
  131. TEST_F(AWSScriptBehaviorS3Test, GetObjectRaw_CallWithOutfileIsReadOnly_InvokeOnError)
  132. {
  133. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  134. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  135. AZ::IO::Path randomTestFilePath = (GetTestTempDirectoryPath() / "random_test.txt").LexicallyNormal();
  136. CreateReadOnlyTestFile(randomTestFilePath.Native());
  137. AWSScriptBehaviorS3::GetObjectRaw("dummyBucket", "dummyObject", "dummyRegion", randomTestFilePath.Native());
  138. RemoveReadOnlyTestFile(randomTestFilePath.Native());
  139. }
  140. #endif
  141. TEST_F(AWSScriptBehaviorS3Test, GetObject_NoBucketNameInResourceMappingFound_InvokeOnError)
  142. {
  143. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  144. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  145. AWSScriptBehaviorS3::GetObject("dummyBucket", "dummyObject", "dummyOut");
  146. }
  147. TEST_F(AWSScriptBehaviorS3Test, OnSuccessOnError_Call_GetExpectedNumOfInvoke)
  148. {
  149. AWSScriptBehaviorS3NotificationBusHandlerMock s3HandlerMock;
  150. EXPECT_CALL(s3HandlerMock, OnGetObjectSuccess(::testing::_)).Times(1);
  151. EXPECT_CALL(s3HandlerMock, OnGetObjectError(::testing::_)).Times(1);
  152. EXPECT_CALL(s3HandlerMock, OnHeadObjectSuccess(::testing::_)).Times(1);
  153. EXPECT_CALL(s3HandlerMock, OnHeadObjectError(::testing::_)).Times(1);
  154. AWSScriptBehaviorS3NotificationBus::Broadcast(&AWSScriptBehaviorS3NotificationBus::Events::OnGetObjectSuccess, "dummy success message");
  155. AWSScriptBehaviorS3NotificationBus::Broadcast(&AWSScriptBehaviorS3NotificationBus::Events::OnGetObjectError, "dummy success message");
  156. AWSScriptBehaviorS3NotificationBus::Broadcast(&AWSScriptBehaviorS3NotificationBus::Events::OnHeadObjectSuccess, "dummy success message");
  157. AWSScriptBehaviorS3NotificationBus::Broadcast(&AWSScriptBehaviorS3NotificationBus::Events::OnHeadObjectError, "dummy success message");
  158. }