private PosterUpdater GetUpdater()
        {
            var log                  = new Mock <ILogger <PosterUpdater> >();
            var dbUpdaterLog         = new Mock <ILogger <PosterDbUpdater> >();
            var yandexStorageOptions = new YandexStorageOptions();
            var options              = Options.Create <YandexStorageOptions>(yandexStorageOptions);
            var storage              = new Mock <YandexStorageService>(options);
            var reader               = new Mock <IPosterReader>();
            var dbUpdater            = new PosterDbUpdater(Db, dbUpdaterLog.Object);
            var guidProvider         = new Mock <IGuidProvider>();

            guidProvider.Setup(mock => mock.NewGuid()).Returns("g-u-i-d");
            return(new PosterUpdater(log.Object, storage.Object, reader.Object, dbUpdater, guidProvider.Object));
        }
        static async Task Main(string[] args)
        {
            var bucket    = "cpk-bucket-storage";
            var accessKey = "JmT-qmYIKGT4KFJXUZtB";
            var secretKey = "Y9H16rM5lga4yG8-kqyByQDv2VkPpIH-0w8OE6Tp";
            var subPath   = "cpk_development";

            var yandex = new YandexStorageOptions()
            {
                BucketName = bucket, AccessKey = accessKey, SecretKey = secretKey, SubPath = subPath
            };
            var yandexService = yandex.CreateYandexObjectService();

            var isSuccess = await yandexService.TryGetAsync();

            Console.WriteLine(isSuccess);

            // for upload
            var filename = "test_file6.mp4";
            var filePath = Path.Combine(@"K:\FTP\Video", filename);

            // for download
            var downloadFileName = "download_file.mp4";
            var uploadedFileUrl  = "";

            // UPLOAD STREAMED TEST
            using (FileStream fs = new FileStream(filePath, FileMode.Open))
            {
                var fileGuid = $"{Guid.NewGuid()}_{filename}";
                uploadedFileUrl = await yandexService.PutObjectAsync(fs, fileGuid);

                Console.WriteLine(uploadedFileUrl);
            }

            // UPLOAD BYTES TEST
            using (FileStream fs = new FileStream(filePath, FileMode.Open))
            {
                var fileGuid = $"{Guid.NewGuid()}_{filename}";
                using (MemoryStream ms = new MemoryStream())
                {
                    await fs.CopyToAsync(ms);

                    uploadedFileUrl = await yandexService.PutObjectAsync(ms.ToArray(), fileGuid);
                }
                Console.WriteLine(uploadedFileUrl);
            }


            // DOWNLOAD STREAMED TEST
            using (FileStream fsDownload = File.Create(downloadFileName))
            {
                var result = await yandexService.GetAsStreamAsync(uploadedFileUrl.ToString());

                await result.CopyToAsync(fsDownload);
            }

            // DOWNLOAD BYTES TEST
            using (FileStream fsDownload = File.Create(downloadFileName))
            {
                var result = await yandexService.GetAsByteArrayAsync(uploadedFileUrl.ToString());

                await fsDownload.WriteAsync(result);
            }

            // PRESIGNED URL TEST
            var presignedUrl = yandexService.GetPresignedUrl(uploadedFileUrl.ToString(), TimeSpan.FromHours(3));

            Console.WriteLine(presignedUrl);

            // DELETE TEST
            var deleteResult = await yandexService.DeleteObjectAsync(uploadedFileUrl);

            Console.WriteLine(deleteResult);

            Console.ReadKey();
        }