BuilderManagerTests.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 <AzTest/AzTest.h>
  9. #if !defined(Q_MOC_RUN)
  10. #include <AzCore/UnitTest/TestTypes.h>
  11. #endif
  12. #include "BuilderManagerTests.h"
  13. #include <AzCore/std/smart_ptr/make_shared.h>
  14. #include <native/connection/connectionManager.h>
  15. namespace UnitTests
  16. {
  17. class BuilderManagerTest : public ::UnitTest::LeakDetectionFixture
  18. {
  19. };
  20. TEST_F(BuilderManagerTest, GetBuilder_ReservesFirstBuilderForCreateJobs)
  21. {
  22. ConnectionManager cm{nullptr};
  23. TestBuilderManager bm(&cm);
  24. // We start off with 1 builder pre-created
  25. ASSERT_EQ(bm.GetBuilderCreationCount(), 1);
  26. // Save off the uuid of the CreateJobs builder for later
  27. auto createJobsBuilderUuid = bm.GetBuilder(AssetProcessor::BuilderPurpose::CreateJobs)->GetUuid();
  28. constexpr int NumberOfBuilders = 15; // Start up several builders, more builders increases the chances of exposing a bug
  29. AZStd::vector<AssetProcessor::BuilderRef> builders;
  30. for (int i = 0; i < NumberOfBuilders; ++i)
  31. {
  32. builders.push_back(bm.GetBuilder(AssetProcessor::BuilderPurpose::ProcessJob));
  33. }
  34. // There should now be NumberOfBuilders + 1 builders, because the first one is reserved for CreateJobs
  35. ASSERT_EQ(bm.GetBuilderCreationCount(), NumberOfBuilders + 1);
  36. // Now if we request a CreateJob builder, we should get the same builder again
  37. ASSERT_EQ(bm.GetBuilder(AssetProcessor::BuilderPurpose::CreateJobs)->GetUuid(), createJobsBuilderUuid);
  38. // And the number of builders should remain the same
  39. ASSERT_EQ(bm.GetBuilderCreationCount(), NumberOfBuilders + 1);
  40. // Release the builders and check that we still get the same builder for CreateJobs
  41. builders = {};
  42. ASSERT_EQ(bm.GetBuilder(AssetProcessor::BuilderPurpose::CreateJobs)->GetUuid(), createJobsBuilderUuid);
  43. ASSERT_EQ(bm.GetBuilderCreationCount(), NumberOfBuilders + 1);
  44. }
  45. AZ::Outcome<void, AZStd::string> TestBuilder::Start(AssetProcessor::BuilderPurpose /*purpose*/)
  46. {
  47. return AZ::Success();
  48. }
  49. TestBuilderManager::TestBuilderManager(ConnectionManager* connectionManager): BuilderManager(connectionManager)
  50. {
  51. TestBuilderManager::AddNewBuilder(AssetProcessor::BuilderPurpose::CreateJobs);
  52. }
  53. int TestBuilderManager::GetBuilderCreationCount() const
  54. {
  55. return m_connectionCounter;
  56. }
  57. AZStd::shared_ptr<AssetProcessor::Builder> TestBuilderManager::AddNewBuilder(AssetProcessor::BuilderPurpose purpose)
  58. {
  59. auto uuid = AZ::Uuid::CreateRandom();
  60. auto builder = AZStd::make_shared<TestBuilder>(m_quitListener, uuid, ++m_connectionCounter);
  61. m_builderList.AddBuilder(builder, purpose);
  62. return builder;
  63. }
  64. }